WebSocket
WebSocketは、インターネットで使用される通信プロトコルの1つです。Webサーバーとクライアント間の双方向通信を可能にします。このプロトコルは、Internet Engineering Task Force(IETF)によって「RFC 6455」として定義されています。
Webは当初、ハイパーテキストをサポートするために設計されましたが、その後、より動的なWebアプリケーションを実現できるよう進化してきました。そのために広く採用されている手法がAJAX(Asynchronous JavaScript and XML)です。AJAXでは、ページ単位で更新する代わりにXMLHttpRequestを使用し、Webサーバーとのきめ細かなデータ交換を可能にします。これにより、応答性に優れたユーザーエクスペリエンスを実現できます。ただし、AJAXではすべてのデータ交換をクライアント側から開始する必要があるため、Webサーバーからクライアントへ能動的にデータをプッシュすることは困難です。
この制約に対処するため、AJAXを拡張する技術としてCometが開発されました。Cometは、「応答を意図的に遅延させるリクエストを作成」し、WebサーバーとのHTTP接続を維持することで、サーバーが情報をプッシュしたいタイミングで応答を送信できるようにします。ただし、Cometにはリソース消費量が多いという問題があります。
WebSocketはCometを改良するものとして開発され、HTML5で利用できます。サーバーとクライアント間の接続を維持し、その接続を使用して継続的な双方向通信を可能にします。現在、主要なブラウザーはWebSocketをサポートしています。
WebSocket接続は、HTTPの「Upgrade」ヘッダーフィールドを使用し、接続をWebSocketにアップグレードすることで、HTTP経由で確立されます。WebSocketをサポートしていないHTTPプロキシをWebサイトが使用している場合、接続または通信に失敗する可能性があるため、適切な設定が必要です。

