WebSocket関連のメモ。
TCPレベルでのプロトコルを定めたのが"The WebSocket protocol"で、これはIETFで策定している。
継続してバージョンアップしており、2011-08現在は HyBi-10 という略称(Hypertext-Bidirectional)のバージョンが最新。
一時期仕様上のセキュリティ問題が見つかっており、Firefox4やOpera11でデフォルト無効にされたこともあった。
そして実際にJavaScriptから使用できるAPIのインターフェイスを定めたのが"The WebSocket API"となり、W3Cで策定している。
基本的に開発者は"API"の方だけを知っていれば良い。ただしネットワーク環境によってProxyを導入していたりするとTCPレイヤーでトラブルが発生する可能性があるので、そうなると"protocol"をある程度は知っている必要があるだろう。
Node.jsやJettyでも動かせるようだが、個人的な好みでPythonで動くpywebsocketを試してみる。
メインはApache HTTP Serverとmod_pythonの組み合わせを想定しているライブラリだが、Webサーバをstandaloneで動かすことも出来る(PythonのHTTPServer系モジュールを利用)ので、特に難しい設定は必要ない。とりあえずWin7 SP1 + Python 2.7でさくっと動かしてみる。
まずはソースツリーをGETする。今回はSVNからcheckoutした。今回動作確認するファイルに絞ってディレクトリ構造を紹介する。
src\ example\ ... サンプルのDocumentRoot console.html ... JavaScriptでechoクライアント echo_wsh.py ... echoサーバ側ハンドラ(WebSocket Handler) handler_map.txt ... URLパスとハンドラのmapファイル mod_pywebsocket\ standalone.py ... standaloneで動くサーバプログラム
サーバ側を動かしてみる。srcにcdし、PYTHONPATHにとりあえずカレントディレクトリを設定。
> cd ...\src > set PYTHONPATH=.
ちなみにPYTHONPATHを設定するのは、まだpythonモジュールとしてインストールしていないため。
standalone.pyを実行する。コマンドライン引数の意味についてはmod_pywebsocketの__init__.pyとstandalone.py参照。
> python mod_pywebsocket\standalone.py -p 8180 -w . -d .\example -m handler_map.txt
ブラウザから下記アドレスにアクセス。
http://localhost:8180/console.html
"connect"に成功すれば、"send"でテキストメッセージを送信、echo結果を確認できる。
サーバ側はC-cで強制終了する。