Web ソケットを使用して、他のすべて (ログイン システム、ユーザー プロファイルなど) の更新 HTTP AJAX 要求をストリーミングする単純な Web ゲームを作成しています。残念ながら、私は mod_python に少し慣れていませんが、Sessions クラスを使用して訪問者を追跡したいと考えています。唯一の問題は、セッションが何らかの理由で mod_python リクエストを必要とすることです。これらのセッションを mod_pywebsocket ハンドラー内で使用する方法はありますか? または、独自のセッション メカニズムをロールする必要がありますか?
1 に答える
誰でもこれを使用できる場合に備えて、mod_python のセッションは mod_pywebsocket で非常にうまく機能することがわかりました。次の 2 つの考慮事項に注意してください。
初期化通常、mod_python リクエストを使用して mod_python Session オブジェクトを構築します。幸いなことに、mod_pywebsocket の作成者は、Web ソケット要求 (web_socket_transfer_data 引数で取得する要求) に互換性を持たせることを事前に考えていました。つまり、通常 mod_python で行うのと同じ方法でセッションをインスタンス化できます (例についてはドキュメントを参照してください)。これは明白に思えるかもしれませんが、私にはそうではありませんでした。これを行ってエラーが発生した場合は、別の何かが間違っています。
セッションのロック もう 1 つ注意すべき点は、特定の ID に関連付けられたセッションはデフォルトでロックされており、そのロックはその Session オブジェクトの存続期間中持続するということです。これは、同じホストからのセッションを使用する 2 つの Web ソケットがある場合、そのうちの 1 つが永久にブロックされる危険があることを意味します。さらに、ドキュメントには、これらのミューテックス ロックが重要なシステム リソースを必要とする可能性があると記載されています。それらは、永続的な接続指向の使用向けではなく、迅速な HTTP リクエストを処理するように設計されていることは明らかです。
セッションを修正する 1 つの方法は、ロックを無効にすることですが、これは賢明なことではありません。私はそれを試していませんが、試してみたら、これらの競合状態で頑張ってください。私がしたことは、短時間だけ必要なセッションを作成し、完了したら None を割り当てることでした。どうやらwith
節はこれらのセッションでは機能しません。繰り返しますが、これはそれほど曖昧ではありませんが、ボンネットの下で何が起こっているのかを理解していないと、頭痛の種になる可能性があります.