我正在尝试使用一个简单的WebSocket示例在我的计算机上运行(localhost
),我得到了JavaScript和C#正常运行和连接,除了Chrome握手后断开连接。
我整个上午都在搜索,我认为它与相同的域名政策有关,而另一个"问题"建议,我已将浏览器更新为最新版本(12.xxx
)。
但是我无法找到解决问题的方法。
我在C#端使用:
ConnectionOrigin = "http://localhost:8080";
ServerLocation = "ws://localhost:8181/test";
我正在使用直接从磁盘打开的普通HTML文件运行JavaScript(网址栏上的file:///
)。我也尝试过使用XAMPP在本地托管它,但我总是遇到同样的问题。
附加了C#程序的日志输出:
New connection from 127.0.0.1:8181 requested. Handshaking ...
Reading handshake ...
GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506 I 2D }6 qFB G0`@88J? 4
Sec-WebSocket-Key2: y 20 8403!24 L 5 8
Sending handshake ...
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://localhost:8080
WebSocket-Location: ws://localhost:8181/test
New connection from 127.0.0.1:8181 established.
http://localhost:8080
Data sent to the client ["Time at the server: 23-07-2011 12:57:27"]
Client disconnected.
Waiting for another connection attempt ...
答案 0 :(得分:5)
如果有此请求:
GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506 I 2D }6 qFB G0`@88J? 4
Sec-WebSocket-Key2: y 20 8403!24 L 5 8
响应必须是:
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://localhost:8181/test
the response code here
所以:
WebSocket
而不是Web Socket
。Sec-WebSocket-...
而不是WebSocket-...
。\r\n
而不是\n
(如果您还没有)。在旁注中,您可能需要咨询chrome://net-internals/
(Events
标签,然后查找相应的SOCKET_STREAM
),以了解Chrome实际收到的回复。
答案 1 :(得分:0)
也许您必须设置Connection: keep-alive
:http://en.wikipedia.org/wiki/HTTP_persistent_connection