Web技術の基礎
チャットのアプリで、新しいメッセージをサーバからブラウザへすぐに届けたい。WebSocketの説明として正しいものはどれか。
- Aブラウザが数秒ごとにHTTPのリクエストを送り、新しいメッセージが届いていないかを、そのたびにサーバに確かめる方式である
- BHTTPで始めた接続を切り替えて(アップグレード)、1つの接続の上でサーバとブラウザのどちらからでもメッセージを送れるようにする
- Cイベントが起きたときに、サーバから別のサーバの、あらかじめ登録されたURLへ、HTTPのPOSTのリクエストで知らせる方式である
答えと解説を見る
正解:B. HTTPで始めた接続を切り替えて(アップグレード)、1つの接続の上でサーバとブラウザのどちらからでもメッセージを送れるようにする
WebSocketは、HTTPのリクエストで Upgrade: websocket を求め、サーバが 101 Switching Protocols を返すと、同じTCP接続をWebSocketの通信に切り替えます。その後は接続を開いたままにして、サーバとブラウザのどちらからでも、小さなメッセージを少ない手間で送れます。一定の間隔で問い合わせる方式では、新着がなくてもリクエストが発生し、新着が届くまでに最大で問い合わせの間隔だけ遅れます。サーバからサーバへHTTPのPOSTで知らせる方式は、Webhookと呼ばれます。
- A. これは定期的に問い合わせる方式(ポーリング)です。新着がなくてもリクエストが発生し、間隔の分だけ遅れが出ます。
- B. 正しい。接続を開いたまま、双方向にいつでもメッセージを送れます。
- C. これはWebhookの説明です。サーバどうしの通知に使われます。