WebSockets握手后Chrome会断开连接

时间:2011-07-23 11:59:25

标签: c# google-chrome websocket

我正在尝试使用一个简单的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 ...

2 个答案:

答案 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-...
  • 您没有包含响应代码,这是握手的基本部分(the specs中描述了结构)。
  • 此外,您应该使用\r\n而不是\n(如果您还没有)。

在旁注中,您可能需要咨询chrome://net-internals/Events标签,然后查找相应的SOCKET_STREAM),以了解Chrome实际收到的回复。

答案 1 :(得分:0)

也许您必须设置Connection: keep-alivehttp://en.wikipedia.org/wiki/HTTP_persistent_connection