2011年12月2日金曜日

WebSocketについて調査中・・・

いまさらWebSocketの存在を知る。
これだ!まさに求めていたのはこれだった!
これを使えばWEBサーバから高速にデータを吸い上げることができる!

と思ったけど、仕様がまだ完全に固まっていないんだね。ブラウザの実装状況もまだこれからという感じかな。
でも非常に期待できる技術なので、PCをサーバ代わりに仕立てたWebSocketサーバをサクッとC++とWinsockで書いてみた。

まずは、OpenHandshakeがうまくいかない。参考にしたblogはDRAFT76に関する記述だったので最初のハンドシェイク部分が違っているようだ。すくなくともChrome14とは合わない。
調べてみると、Chromeから送られてくるのはSec-WebSocket-Keyヘッダであって、Sec-WebSocket-Key1やSec-WebSocket-Key2というものは無い。どうやらHybi-7あたりでハンドシェイクの仕様が変わったようだな。そうか、Chrome14はHybi-7(Hybi-10)対応なのか・・・。

というわけで、SHA1を使ったKeyのハンドシェイクも実装した。BASE64エンコード処理でちょっとバグったけど、なんとか修正してハンドシェイクが通るようになった。

そして次はPayloadのフレーミングの実装だ。とりあえず送りたいデータはバイナリなので、バイナリフレーム(82h)から始まるデータを送ってみる・・・。Chromeのコンソールに何か出てる!と思ったら、「バイナリフレームはまだ対応していない」とか何とか・・・。うーん、まだ仕様が新しすぎてブラウザの実装がついてきていないんだね。
と思ったけど、ChromeはVer15になっていることに気づいてアップデートしてみると、すんなりバイナリフレームを受信した!onmessageに受信イベントが来るようになったぞ。

ついでに、Firefoxでもやってみる。
まずWebSocketオブジェクトが無いと怒られる。そうだそうだ、セキュリティの関係からWebSocketはMozWebSocketという名前に変えられてしまったんだっけ。
今度こそ!と思ったが、やはりバイナリフレームは来ない。試しにテキストフレームを送ってみると、ちゃんとonmessageにデータが来てる!そうか、Firefox8は、Hybi-10対応みたいだけどバイナリフレームは未実装なのか・・・。

というわけで、まとめ。

Chrome14/15、Firefox8はHybi-10対応している。
しかし、バイナリフレームに対応しているのはChrome15だけ。

ということが分かった。

0 件のコメント:

コメントを投稿