【web知識】websocketとはなんぞや
node.jsとHTML5に触れた際に話題になったので個人的なまとめ。
- websocketとは
「AjaxやCometの通信におけるデメリット部分を補い、より効率的にサーバとクライアント間の双方向通信ができるようになる。」
とのこと。
じゃ、まずはAjaxやCometのデメリットを挙げてみる。
基本的にブラウザからのリクエストで動作する仕組みなので、サーバ側から自動でデータを送信することがない。
- Comet
サーバ側で意図的にリクエストに対する保留状態を作り、サーバ側で何かしらの変更が発生した場合にレスポンスを返す仕組みのため、Ajaxに比べてリソース消費が大きい。
なるほど。Ajaxはブラウザから「○○しろ!」という命令を送らないとサーバからの応答が貰えなくてサーバが能動的にクライアントへ何か送ることができない。
Cometはクライアントからの命令を受けた時に、その命令を持ちっぱなしにしてサーバで何かあったらレスポンスを返すという仕組みで、持ちっぱにしてる分、リソースを食うのが難点。
ということなのかな?
さらにもう1個弱点。
両方共HTTPPリクエストを使っている、通信のたびにHTTPヘッダが付与される。
そのためコネクション数に比例して通信量や処理量が増える。
で、websokectの特徴はというと
- サーバとクライアント間は一度でも接続が確立すると、明示的に切断しない限り通信手順を意識することなくデータのやり取りをソケット通信で実施できる
- WebSocketで接続が確立しているサーバとすべてのクライアントは同じデータを共有し、リアルタイムで送受信できる
らしい。
例えるなら、
従来の方法はサーバとクライアントの間にある山に、リクエストの度にトンネルを掘っていて、レスポンスが通るとそのトンネルを埋めていた。
だがwebsocketは1回掘ったトンネルを使いまわすので「掘る」「埋める」の作業が省けて効率がいい。
ということらしい。
この記事書いてて理解度の低さが露呈されたのでもうちょっと勉強してきます...