サーバークライアントから取得したメッセージに従って、redisを使用してWebソケットサーバーのデータを保存/更新/削除しています(autobahnを使用して実装-ツイストベースのWebソケット実装)。Redis 操作には、redis-py パッケージを使用しています。サーバーに接続している同時クライアントの数が増えると、リクエストが同期的に処理されることがわかりました。redis 操作が、サーバーが並列クライアント要求を処理するのをブロックしていることがわかりました。なぜこれが起こっているのですか?この問題を解決するにはどうすればよいですか? autobahn プロトコル クラスの onMessage 関数から redis 操作を行っています。
1 に答える
0
グーグルで根本的な原因を見つけました。問題は、Redis 操作に使用していた Python パッケージ (redis-py) が同期的に設計されていたことです。そのため、ねじれたサーバーのメイン スレッドは、Redis からのデータのフェッチ/更新中にブロック状態になりました。現在、defer パッケージを使用したねじれた方法で redis-py の代わりに、txredisapiと呼ばれる Redis 用のねじれたベースの非同期パッケージを試しています。
于 2015-10-07T23:19:14.463 に答える