今日はwebsocket

なんだか、話が二転三転して結局何も作れないエンジニアになってしまいそうだが、今日はwebsocket導入についてのメモを。

websocket

HTML5で導入された通信プロトコル。サーバプッシュ型のアプリケーションを開発できる。今回、チャットを使ったwebアプリを構築するために、この技術を使うことにした。

ポート

今回、既に80番ではapache上でwebメールやらなんやらが動いている状態なので、新しいアプリケーション用にいくつかportを開放する必要がある。

8080番

webrickとかのAPサーバ用。

3000番

websocketサーバ用。

843番

socket-policy用。

クライアント

対応ブラウザは現状chromefirefox4系のみ。(safariも?)その他のブラウザでは、web-socket.js+flashを使う方法がある。この場合、サーバ上にsocket-policyファイルを配置しなければならない。また、個別にアプリケーション実装する場合は、上記サーバのF/Wを利用することもできるぽい。(やってない)

websocketプロトコルの仕様

draft75と76でhandshakeの仕様が大きく変わった。そのため、サーバとクライアントで、実装された仕様を合わせなければならない。

対応状況(試した範囲)

draft75

クライアント:chrome5系 サーバ:rev-websocket

draft76

クライアント:chrome6系(β)、web-socket.js サーバ:mojo、rev-websocket

⇒新しい仕様であることも踏まえると、draft76対応にしたほうがよい。chrome5系が使えないのがネックだが・・・。

socket-policyファイルについて

現状chrome6系を導入している人はあまり多くないと思うので、web-socket.jsに対応させたほうがいいと思われる。そのためにsocket-policyを導入しなければならないが、基本的には
有効なWikiNameではありません - namespace gimite
に書いてある通りにすればよい。ubuntuを使っている場合、inetdにopenbsd-inetdとxinetdの選択肢があるが、上記サイトの手順に従う場合はopenbsd-inetdを導入する。

F/W選定

イコールサーバ選定ということである。

mojo

perl。get/postとwebsocketを一つのポートで使えるみたい。mojolicious::liteを使った場合、静的ファイルの置き場所が分かりにくいが、スクリプトの置いてあるディレクトリにpublicを作ると、そこがdocrootになる。

rev-websocket

rubywebrickとwebsocketサーバを別々に立てるので、get/post用に別ポートを開放する必要がある?それだったらapache+rev-websocketという選択肢もありそうだが、ポータビリティが下がるか。そもそものポータビリティはmojoに劣る気がする。利点がdraft75にも対応できるくらいしかないか・・・?

node.websocket.js

サーバサイドもjs。js好きなので悪くない選択肢。apache、またはnode.jsと組み合わせる。こちらもポータビリティはあまり良くないが、mojo+node.websocket.jsっていうのも面白い?node.jsの学習も必要だなあ。が、全体として未成熟感は否めない。

その他

c++しか分からないのですが・・・

⇒現状ではやはりmojoが有力。

そろそろ

webサーバくらい書けるようになっておかねばなりますまい。