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