WebSocket勉強会に参加した

5/28は、久々に勉強会に参加しました

今回の勉強会は、HTML5でも検討されているWEBサーバとブラウザ間の新しい通信技術「WebSocket」に関する勉強会です。

WebSocket勉強会
http://homepage3.nifty.com/toremoro/study/websocketconf.html

WEBで使われているHTTPプロトコルは、ブラウザからの要求に対してサーバが応答をするという、一方向の通信が基になっているので、「メッセージが届いた」「メールが届いた」など情報が変化したときにリアルタイムにブラウザに表示したいという要望を実現するためには、いろいろと工夫が必要になっていたのですね。

現在、リアルタイムのWEB処理で広く用いられているAjax という技術はブラウザから問い合わせを行う「ポーリング」方式が基となっています。なので、変化が少ない場合は空振りが多く通信量が増えてしまうのですね。 これを改善した Comet という方式は、状態変化があるまでなるべく応答を返さないという工夫をして問い合わせの回数を減らしていますが、それでも無駄な通信が残る。。

ということで、通信方式自体を、通常のクライアントーサーバ通信に使われるソケットを使った方式にしてしまおう。。 というのが Websocket という技術。 現在IETFなどで活発に仕様に関する議論がなされています。
何万クライアントの同時接続にも耐えるいわゆる「C10K (Client
10,000)」に対応するためにWebサーバ側で「非同期通信、 NonBlocking I/O」といった通信負荷を下げる通信方式が使われています。

通信方式をみると、socket 方式だし、 I/O処理の多重化も詳しいところ知らないけれど良く聞くキーワードであるし、これだけなら WebSocket の通信技術自体は新規のものでは無い印象を受けます。
重要なのは、こういった従来は専用のサーバ、クライアントを構築することで実現していた大規模なリアルタイム処理をWebサーバ- Webブラウザという広く用いられているシステムだけで実現が出来るというところなのかも。サーバ側の処理も Node.js というサーバ側で動作するJavascript をベースとしたアプリで実現できるので、サーバプログラムの開発者でなく、WEB技術者であっても手を出せるというところが大きいのかもしれませんね。

WebSocket の仕様検討は、とにかく改版が速くブラウザの実装が追いついていない状況です。現在一般に利用できるブラウザではChrome だけがWebsocket 対応になっているという状況。おまけにバージョン間でのプロトコルの差異が大きく 「早くRFC化して仕様をFIXして、以前のバージョンを廃止して欲しい」という声も聞かれます。
今回の勉強会では、プロトコルや標準化動向だけでなく、Websocket を用いたデモを多く見る機会があった(というよりもデモの方が活発であった印象もあります)のですが、 Webブラウザ上でレスポンス良く、リアルタイム通信を行えていました。

Websocket の概要については、@kuruma さんによる講演「Websocketを見てみよう」 や かみやんさんの「Websocket Communication」
の資料が非常に分かりやすいです。
http://kuruman.org/diary/2011/05/28/file/websocket_study_kuruma.pdf
http://prog.re-d.net/demo/slide/20110528/


私自身の興味としては、この「Websocketを使ったリアルタイム通信がHTTPプロキシを越えられるか」ということ。
最初勘違いをしていたのだけど、Websocket はソケット通信をプロキシ透過させるためのプロトコルではないってこと。
そんな疑問をツイートしていたところ、Ust中継を見られていたドワンゴの戀塚さんからはこのようなツイートがありました。ありがたいです


なのでHTTPプロキシによっては中継が出来ない場合があるようです。特にWebsocket で80/tcp, 443/tcp 以外のポートを使っている場合は中継出来ない場合が多いようです。講師の方も今後開発したいものとして「Websocket プロキシ」を上げている方もいらっしゃいました。HTTPに限定しないプロキシというと、SOCKSプロキシのような位置づけになるのだろうかなあ。

またプロキシだけでなくて、80,443 以外をフィルタする環境(ホテルの無線LANなど多いですよね)でも使えない問題がありそう。事実、昨日ホストをしていただいたところの無線LANでも一部のWebsocket のデモが動作しないということがあったしなあ。

Websocketのプロキシを作りWebsocketのパケットはそこを透過させるというアプローチが
今後考えられるのだろう。 それとは別のアプローチで、WebsocketのHTTPSへのカプセリングということはされていかないのだろうかな。

懇親会

懇親会は神保町のおしゃれなイタリアンレストラン。
40人ぐらいの出席者と談笑していました。有意義な時間です。

話題になった「IT勉強会で深夜アニメネタは接待ゴルフと同じか」 から、本来のWebsocket についての話まで話していました。 モチベーションあがるわー。