こんにちは。
WebSocketについて質問者様の理解で正しいと思うのですが、フォローくらいの意味で回答させていただこうと思います。
結論を書くと
・WebSocket用のサーバーを立てなければいけない
・WebSocket用のクライアントを使わなければいけない
と言う部分はその通りなのですが、以下のようなプロトコルになっている為に、既存のHTTPの枠組みの上に成り立っていることで、HTTPの延長のように捉えることができます。
WebSocketでの送受信の開始
0. WebSocketクライアントは、**HTTPリクエスト※**で、「WebSocket使うよ」との付帯情報をHTTPリクエスト中に追加してサーバーに送信します。
※HTTPリクエストと言うことが重要です。
-
WebSocketサーバーは、クライアントからの「WebSocket使うよ」情報を認識してHTTPレスポンスで「OKです。今後、このコネクションでWebSocketプロトコルで通信できます」と返信します。一般的なHTTP通信ではこの後コネクションを切断しますが、切断しません。
-
WebSocketクライアントはWebSocket用の送受信を続行する。コネクションは切断されていないので、WebSocketサーバー側から能動的な送信(プッシュ)もできる。
とのようなことになっています。
upgradeとか単語が出てくるので混乱するのですが、HTTPリクエストのヘッダーフィールドに"upgrade"があって、値として"websocket"とセットしてあります。これを含むフィールドをサーバー側が見ることで、WebSocketか、またはこれまでのHTTPかをサーバー側が判断することができます。クライアントが「WebSocketプロトコルにアップグレードしますよ。」と宣言しているとでも取ればよいでしょうか。
対して 「WebSocketクライアント + 通常のHTTPサーバー」の構成であれば、例えばTCP80番ポート(HTTP)でWebSocketクライアントが「"WebSocket使うよ"HTTPリクエスト」を出してもサーバーが認識できないのでそれで終わります。WebSocketクライアントもHTTPレスポンスを見ることで「あ、サーバーが対応していないな。」と認識することができます。
WebSocketのサンプルプログラムなどではポート番号として8000等を使うことがありますが、これがwell-knownポート HTTP80番やHTTPS443番なら一般的なファイアウォールであれば開いていて、WebSocket用のポートをそれに合わせれば好都合です。
WebSocket関連の記事はサーバーとプロトコルの意識が混同していることもあって理解しづらかったりしますが、分けて考えると良いです。サーバーとクライアントは実装がたくさんあって混乱し易いので、先にプロトコル部分を簡単にでも理解すると整理できるかと。
過去の記事ですが、以下が分かり易いと思います。
WebSocketについて調べてみた。
上記の記事から紹介されていますが、以下もおすすめです。
Windows 8 と WebSocket プロトコル
あとはやはりRFCでしょうか。
The WebSocket Protocol
非公式なようですが、日本語訳がこちら。(翻訳者様に感謝)
WebSocket プロトコル RFC 6455, The WebSocket Protocol
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/10 04:05