我已经测试了许多套接字示例,它们之间的通信非常简单:套接字被打开并保持打开状态,直到您关闭它,并且除了您发送的信息之外没有任何信息被发送。

使用HTML5web套接字,这两个时刻是不同的。

起初,只要客户端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 setup utility)发送一些字符串时,socket的 onmessage 事件不会被触发,客户端套接字在此之后立即关闭连接。

所以,我想HTML5web socket在使用之前需要一些握手。在哪里读到它?

顺便说一句:我正在使用Ruby作为服务器端语言。

有帮助吗?

解决方案

我已经测试了许多web套接字示例。...

从你所描述的,你没有使用"web套接字",而只是"套接字",例如。直接TCP/IP。WebSockets(例如你所谓的"HTML web sockets")是不同的:它们用于通过已建立的HTTP连接创建类似套接字的东西。因此,您看到HTTP查询与"升级:websocket"标头,带有"Sec-WebSocket-Key"等。

建立连接后(服务器发送代码为101的响应),WebSocket连接有自己的数据帧和加扰,因此您不能只将其与普通套接字工具一起使用。

http://tools.ietf.org/html/rfc6455 对于规范和使用"WebSockets"作为关键字,如果你寻找更多的文档,用法。..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top