目次

ホーム#プロトコル に戻る

WebSocketで、双方向通信かつリアルタイム通信



WebSocketとは

他のプロトコルとの比較


双方向通信の歴史

ポーリング(&Ajax)

ポーリングは、定期的にサーバーにリクエストを送り、サーバー側で更新があった際にクライアントに反映する

Ajax

効率のために差分だけ取得する技術
更新したい部分のデータだけをJSONやXMLで受け取ることで、取得するデータの量を削減する

問題

定期的にサーバーにリクエストを投げる仕組みであるため、最新情報がなくてもリクエストしてしまいます。
ポーリングの間隔が短いとサーバー側に負荷がかかってしまう。
ポーリングの間隔が長いと画面が更新するまでに時間がかかってしまう。


ロングポーリング(Cometなど)

ロングポーリングでは、リクエストを送った後、サーバー側は更新があるまでレスポンスを返さず、更新が出た時に初めてレスポンスを返します
その後、データを受け取ったクライアントは再度ロングポーリングのためのリクエストを通信を張り直します。

問題


Server Sent Events(SSE)

ロングポーリングの問題を解決したプロトコル。
SSEはレスポンスがあっても通信を貼り直すことはせず、その後も通信を使い続ける。

SSEの問題


WebSocketの通信の仕組み

(1)コネクションの確立

クライアント(ブラウザ)からリクエスト
GET /xxx/uri/xxx HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: E4WSEcseoWaaaaaXXXX==
サーバからのレスポンス
HTTP/1.1 101 OK
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: 7eQChgCtQMaaaaaXxxxxx=


(2)双方向通信


参考





ホーム#プロトコル に戻る