仕事で何をしても良いという1週間だったのだけど、さすがに何でもというならMMLコンパイラを...というわけにもいかず、仕事に関係しうるものでほんの1週間で終わるものはほとんど趣味とかぶらなかったので、simplify mediaみたいなメディア共有サーバを作りたかったことを思い出して、何となくコードを書いてみることにした。そして、設計の途中でHTTPのduplex communicationがほしいと考え、それならゼロからWebSocketsを実装してしまおうと考えたのだった。結局WCFのバインディングを作るというところで未完に終わり、アプリを実装するところまでは全く及ばなかった。WCFのバインディングとして実装するのは、それなりに面倒だ。ただのTCPアプリケーションとして実装するなら1週間でもおつりがくるだろう。
HTTPサーバとも共存できるようHttpListenerを改造するところから始めたのだけど、冷静に考えたらほしいのはWebアプリケーション環境との統合だった。つまりいじるならxspのようなHTTPサーバだったかもしれない。そうなると簡単ではないけど。そもそもduplex通信のターゲットになるサーバは80とは別のポートで動いていても良いだろうし、C10Kなどの負荷が大きくなったらマシンごと分散するのが筋だろうから、スタンドアロン実装でも良かったかもしれない。とまあ、いろいろ考え直させられることはある。
あと、WebSocketsを実装していて気づいた大きな問題として、データフレームとしてUTF-8の文字列しか送受信できないことがある(現時点での仕様ではセクション5.3など)。これではバイナリデータの送受信ができない。もともとHTML5のDOMからJavascriptでコールバックを受けるために使うものだったのだから、そういう仕様になっているのだろうけど、これでは画像や音楽データは送れない。Web SocketsのフィードバックのMLを眺めると、同様の要望が寄せられているようなので、おそらく将来の仕様では対応することになるだろうと思う。
Web Socketsはまだ仕様がコロコロ変わっているように見えるので(たとえば世の中にあるサンプルの多くはまだMD5を使ったハンドシェイクを実装していない)、実装作業を再開して公開するのはもっと後でも良いかもしれない。
Leave a comment