プログラミングのこと、Pythonのこと、気になったソフトウェアのこと、身の回りのこと、いろんなこと。ページホームwiki2010年1月13日pywebsocketをちょっとだけ見てみたpywebsocketというPython製のwebsocketを利用するためのApacheモジュールがあるらしいので、ちょっとだけ見てみました。ちなみにこのエントリはPythonとはあまり関係がありません。興味を持ったきっかけは、現状のApacheでC10Kをどうやって解決してwebsocketを実装したのだろうということです。結論は残念ながら単にApacheでwebsocketを利用するためだけのものでした。現状のインフラでちょっとだけ実用的にwebsocketを遊べるのはそれはそれですばらしいことです。僕がgolangで書いたサンプル、もしくはgolangはまだ実環境で使える代物ではないし。Apacheはスレッドモデルで動きます。一つのリクエストが一つのスレッドを占有します。WebSocket自体は、AJAXによる定期的なポーリングやcometによるロングポーリングよりはオーバーヘッドは遙かに小さくメリットがあります。AJAXによる定期的なポーリングはサーバーサイドでは一瞬ですがWebSocketのようにコネクションが張りっぱなしの時は、1リクエスト1スレッドだと問題が発生します。スレッド一つにつき、大体メモリ1Mを消費します。1000個のリクエストだとスレッドの維持だけで1Gのメモリを消費します。chatのサンプルは、一つのクライアントに対して二つのスレッドを使っていたので、単純に考えて2Gのメモリが必要です。chatの場合、ほとんど何もしない状態なのに、スレッドのコンテキストの切り替えが発生し無駄に時間がかかります。それでも1000個ぐらいであれば多分問題ないですが、クライアントが増えると馬鹿になりません。メモリの方がネックになると思っていますが。pywebsocketもmod_python経由でスレッドモデルなので、結局上のような限界が発生します。mod_pythonでクライアント-サーバみたいに動かすことで回避できるか期待しましたが、結局同じです。スケールを考えてwebsocketを使うのにはAapacheの次のバージョンが必要かもしれません。待ちきれないという、そんなあなたにjettyで、jythonです。(Atom)おまえ、誰よ?Unknown詳細プロフィールを表示Twitter人気の投稿あれからJavaのリフレクションのスピードはどうなったのか?Python用のWebSocketのクライアント作った拡張forループでループの回数も同時に欲しいよね。