8

所以我看到了这篇很棒的博文,Experimenting with Node.js。我决定尝试使用作者的要点自行设置。它没有用。

进一步调试显示 websocket 连接正常,但在调用“发送”后立即关闭。这是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.0 beta 中都试过这个。它们都表现出相同的行为。如果我去原来的博客网站,它工作正常。

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

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

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

我在这里发现了一些类似的问题,但要么在没有发布修复程序的情况下得到解决,要么似乎不适用于这种情况。如果它更容易,我可以从要点中发布代码。

4

4 回答 4

3

CloseEvent 有一个“代码”属性,它将为您提供有关关闭连接原因的信息。

“返回一个包含服务器发送的关闭代码的无符号短代码。以下值是允许的状态代码。”

支持多种代码值。以下是最突出的:

  • 1000:关闭_正常
  • 1001:CLOSE_GOING_AWAY
  • 1002: 关闭协议错误
  • 1003:关闭_不支持
  • 1005: 关闭_NO_STATUS

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

于 2016-05-03T15:18:42.727 回答
1

主要的头部打击。尽管我相信我安装了最新版本的 Node.js,但我没有。我有几台装有 Node.js 的机器,我一定是迷路了。我有 Node.js v0.1.96。升级到 v0.1.102 后,一切正常。

对不起大家!:-D

于 2010-07-30T13:46:53.707 回答
1

在 Android 中,对我来说,问题在于我如何处理数据。我能够通过执行以下操作来确定。

  1. 检查 NodeJs(服务器)中是否有问题 - 通过评论发送项目ws.send(JSON.stringify(whatever));

  2. 检查 Android(客户端)中是否有问题 - 通过评论 onMessage。Log.d("TAG","onMessage: " +text);然后看看你如何处理数据并注释掉这些部分。运行日志猫onClosed, onFailure

这至少可以帮助您查明问题,因为很难找到 NodeJs Websocket 帮助。 Languages are not hard - its the documentation, support and lack of community which is difficult.好的烹饪书籍,项目视频教程很难获得。

我以 Json 数组的形式获取数据,并试图以错误的方式填充回收站视图。这对我来说是个问题。

您还应该在 node.js 文件中尝试以下代码以查看原因

// Connection Closed
ws.on('close', function close(code, reason) {
console.log('ws is closed with code: ' + code + ' reason: ' + reason);
});

// On Error
ws.on('error', function(e) {
    console.log("error occured" +e);
});

有关完整的问题和解决方案,请参见此处:Websocket 关闭代码:1006 Node Android okhttp3 AmazonEc2

于 2020-05-20T05:35:24.850 回答
0

对于从浏览器发出发送时发生断开连接的问题,您需要等待 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);
}
于 2010-10-14T13:51:37.847 回答