WebSocketってなあに?
ざっくりと
ブラウザの対応状況はどんな感じなの?
実は何回かプロトコルが細々と変わってて、色々ややこしい事になってるので一覧表を見てくださいな
node.js ならば、socket.ioっていうライブラリを使えば、その辺の問題をなんとかしてくれる
cometって昔あったよね?
- あれは、擬似的に双方向通信を可能にしてた
- リクエストを受けてもすぐに情報を返さないで、本当に情報を返したい時に返す
- 接続方法は、ストリーミングと、通信リソースの軽減を目指した、ロングポーリングがメジャー
ストリーミング
- 接続後、データの送信を完了させないで、必要に応じてデータを送信する方法
ロングポーリング
- 接続後、イベントが発生してデータが来ると接続を遮断して、クライアントはpushが欲しい時に再度接続を行なって待つ方法
- ストリーミングよりもコネクションを節約できる
- どちらにせよ無理やり従来のブラウザで双方向通信を可能にしたので、ブラウザ側やサーバ側で色々問題があったらしい
- HTTPコネクションを維持し続けるので、通信リソースを食う
- 同時接続数やタイムアウトの時間がブラウザ毎にまちまちなので、その辺を意識したクライアント、サーバ側の実装が大変
その辺の問題点を解決するため、
っていうのが、websocket
websocket = node.jsって印象だけど、サーバ側はnode.jsじゃないとダメなの?
当然ながらプロトコルが実装されたモジュールがあるなら、どんなのつかっても構わない
- em-websocketっていうgemもあるよ!
ざっくりとそんな感じで
参考
- HTML 5 Web Sockets vs. Comet and Ajax
- WebSocket - Wikipedia
- WebSocket サーバの実装とプロトコル解説 - Block Rockin’ Codes
- 技術から業務の利用シーンを考えてみる part2 | Developers.IO
- ここの一覧表が、Ajax/Comet/Websocket の差異がわかりやすく解説されてる