home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

技術/HTML5/WebSocket

作成日: 2011-08-20 21:10:37   /   last updated at: 2011-08-20 21:11:14
カテゴリ: HTML 

WebSocket関連のメモ。

TCPレベルでのプロトコルを定めたのが"The WebSocket protocol"で、これはIETFで策定している。
継続してバージョンアップしており、2011-08現在は HyBi-10 という略称(Hypertext-Bidirectional)のバージョンが最新。

一時期仕様上のセキュリティ問題が見つかっており、Firefox4やOpera11でデフォルト無効にされたこともあった。

そして実際にJavaScriptから使用できるAPIのインターフェイスを定めたのが"The WebSocket API"となり、W3Cで策定している。

基本的に開発者は"API"の方だけを知っていれば良い。ただしネットワーク環境によってProxyを導入していたりするとTCPレイヤーでトラブルが発生する可能性があるので、そうなると"protocol"をある程度は知っている必要があるだろう。


pywebsocketで動いているところを見てみる

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で強制終了する。


original url: https://www.glamenv-septzen.net/view/1008