0

私は多くのソケットの例をテストしましたが、それらの間の通信は非常に単純でした: ソケットが開かれ、閉じられるまで開いたままになり、送信した情報以外は送信されません。

HTML5 Web ソケットでは、これら 2 つの瞬間が異なります。

最初に、クライアント HTML5 ソケットがサーバー ソケットに接続するとすぐに、一連の情報が送信されます。

GET /echo HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:2002
Origin: null
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: iYzsmhdzg6h6/UGtCLLGVA==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Cookie: _rails-socket-listener_session=dGtleFYxNjhIaUZrZVpOWUNIMHdFZFd6WW9wY2FJYjIwOWdSMFVPR1ZkYkZUakExdVlhNzMvWEphNG1IRUIvT1JsQ0N6bHF4REFXTkJUemE4R2RjOER6bXdhSEt6M0tIYmRwV0w3VzkrVGt4MzN2Z0M3MXMyYndZR3hvOGMySTJTZmdEMW9JdEE5ZERuSDB4VCtROFNnPT0tLTlheG1KamlBSVVmT0tUZ1F5bmQ0OUE9PQ%3D%3D--23413749a30295f08d277292837c76187a02a332

この情報をどのように解釈するか? それをどうするか?

次に、デバッグ サーバー (Hercules セットアップ ユーティリティ) から文字列を送信すると、ソケットのonmessageイベントが発生せず、クライアント ソケットがこの直後に接続を閉じます。

したがって、HTML5 Web ソケットは、使用する前に何らかのハンドシェークを想定していると思います。それについてどこで読むべきですか?

ところで: サーバー側言語として Ruby を使用しています。

4

1 に答える 1

1

多くの Web ソケットの例をテストしました ....

あなたが説明したことから、「Webソケット」ではなく、単に「ソケット」、たとえば直接TCP/IPを使用しました。WebSockets (たとえば、「HTML Web ソケット」と呼ばれるもの) は異なります。それらは、確立された HTTP 接続を介してソケットのようなものを作成するために使用されます。したがって、「Upgrade: websocket」ヘッダー、「Sec-WebSocket-Key」などの HTTP クエリが表示されます。

接続を確立した後 (サーバーがコード 101 で応答を送信)、WebSocket 接続には独自のフレーミングとデータのスクランブルがあるため、通常のソケット ツールだけでは使用できません。

仕様についてはhttps://www.rfc-editor.org/rfc/rfc6455を参照してください。詳細なドキュメント、使用法を探す場合は、「WebSockets」をキーワードとして使用してください...

于 2014-06-04T19:06:19.903 に答える