10章WebSocket
HTTPベースのAPIはリクエストとレスポンスのモデルに基づいており、クライアントはサーバーにリクエストを送信してレスポンスを待つ。クライアントが先にリクエストを行わなければ、サーバーから接続を開始したり、クライアントへと一方的にレスポンスを送信したりはできない。Server-Sent Events(https://oreil.ly/sDPnx)やHTTP Streaming(https://oreil.ly/ETuMx)などの手法を使えば、情報をクライアントに複数回プッシュできるが、ここでもやはりクライアントが最初のリクエストを行う。一方でポーリングと呼ばれる手法では、クライアントは新しい情報を求めて繰り返しリクエストを行う。これには、リクエストのたびに新しいTCP接続が確立されるショートポーリングと、長寿命のTCP接続の上で複数回リクエストが行われるロングポーリングという2つの形態が考えられている。
同時に双方向の通信を行えることを目指して、WebSocketという仕組みが提案されている。WebSocketはリクエストとレスポンスのモデルを取り入れておらず、クライアントとサーバーが互いに独立してメッセージを送信できる。全二重伝送モードをサポートするTCPベースの独自プロトコル(WebSocket)が用意されており、HTTPからこのプロトコルに切り替えるという手順がとられる。
WebSocketは非同期通信†1であるとみなされることが多いが、本質的に非同期であるというわけではない†2。WebSocketの上で同期形式の通信を行うクライアントとサーバーの実装も存在する†3。しかしWebSocketを非同期形式で利用すれば、複数の接続を効率的に管理でき、応答性 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access