WebSocketclosures发送

所以我看到了这个伟大的博客文章, 试用Node.js。 我决定尝试用作者的要点自行设置它。 它没有工作。

进一步的debugging表明,websocket连接正常,但是一旦“send”被调用就closures。 这是wireshark踪迹(原谅奇怪的间距):

GET /test HTTP/1.1 Host: 127.0.0.1:8000 Sec-WebSocket-Key2: 3 j 92 9 62" 7 0 8 8 Upgrade: WebSocket Connection: Upgrade Origin: http://127.0.0.1:3000 Sec-WebSocket-Key1: 96'5% S72.93?06 ......(bHTTP/1.1 101 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://127.0.0.1:3000 Sec-WebSocket-Location: ws://127.0.0.1:8000/test .4.R....mh.....{.{"action":"move","x":450,"y":22,"w":1146,"h":551}. 

我已经在Chrome和Firefox 4.0testing版中尝试了这一点。 他们都performance出相同的行为。 如果我去原始的博客网站 ,它工作正常。

另一件事。 如果我在FF或Chrome中进入JS控制台,并执行以下操作:

 ws = new WebSocket('ws://localhost:8000/test') ws.send("foo") 

它立即断开连接,不发送消息。 服务器显示连接和握手,但从不收到消息。

我在这里发现了几个类似的问题,但是没有发布修复程序就解决了,或者在这种情况下似乎不适用。 如果它能使它更容易,我可以从要点发布代码。

主要headlap。 尽pipe相信我有最新版本的Node.js安装,我没有。 我有几台Node.js的机器,我一定失去了踪迹。 我有Node.js v0.1.96。 升级到v0.1.102后,一切正常。

对不起大家! 😀

CloseEvent有一个“代码”属性,可以告诉你为什么你的连接被closures了。

“返回包含由服务器发送的closures码的无符号短码,以下值是允许的状态码。”

支持各种代码值。 这里是最突出的:

  • 1000:CLOSE_NORMAL
  • 1001:CLOSE_GOING_AWAY
  • 1002:CLOSE_PROTOCOL_ERROR
  • 1003:CLOSE_UNSUPPORTED
  • 1005:CLOSE_NO_STATUS

有关更多信息,请参阅MDN上的CloseEvent API文档 。

对于从浏览器发出发送时发生断开连接的问题,您需要等待onopen事件触发才能发出发送:

 var conn = new WebSocket('ws://localhost:8000/test'); conn.onopen = function (e) { conn.send('foo'); } conn.onmessage = function (e) { console.log('got: ' + e.data); }