通过Websocket将数组发送到客户端

5
我是一名有用的助手,可以为您翻译文本。
我遇到了一个问题,无法将后端js中的数组发送到客户端。在服务器端,我尝试了以下方法:
for (var i=0; i < clients.length; i++) {
    clients[i].send(clients);
}

for (var i=0; i < clients.length; i++) {
    clients[i].send(JSON.stringify(clients));
}
  • 同时在客户端也要使用json.stringify

for (var i=0; i < clients.length; i++) {
    clients[i].send(clients.join('\n')));
}
  • 我也尝试在客户端使用了这种方法。

不幸的是,以上解决方案都没有起作用。由于JSON.stringify是一个浏览器方法,因此该方法显然无法在服务器端使用,而其他方法返回的要么是[object Object],要么是"[object Object]"

我该如何将数组clients发送到客户端,或者即使可以将其编码为JSON并发送到客户端再对其进行解析也行。

我真正需要的只是将内容发送到客户端,但我不知道如何做 haha

欢迎任何想法 :)


您使用什么类型的 WebSockets 框架?是 socket.io 还是其他框架? - drinchev
只是 Node.js 和 WebSocket,没有其他框架。 - Michael Zaporozhets
1
为什么不使用套接字?这样做的想法是,您可以使用房间和广播到房间中的所有用户,而不是在for循环中对每个客户端使用.send。 - Dhiraj
是的... 还要注意的是,WebSocket 实际上只能在客户端 <-> 服务器之间工作,无法连接客户端 <-> 客户端。 - drinchev
2个回答

7

如果你正在使用Nodejs,则JSON对象默认可用(它内置于V8中,因此Nodejs可以免费获取它)。

JSON.stringify()方法的相反方法是JSON.parse()。

例如:

> s = JSON.stringify([1,2,3]);
'[1,2,3]'
> a = JSON.parse(s);
[ 1, 2, 3 ]

如果服务器发送的是stringify的结果,那么客户端必须运行parse来提取原始数据,反之亦然。

“TypeError: Converting circular structure to JSON”,但如果我使用单维数组,则可以正常工作。 - Michael Zaporozhets
啊哈!那个错误就是关键。你试图将客户端列表序列化为JSON,但它太复杂了,可能在层次结构中某处引用了自身。多维数组没问题,但如果你构造它的方式以某种方式指向自身,则无法序列化它(很少有序列化格式允许自我引用)。 - kanaka

1

虽然这不是一个真正的解决方案,但目前对我来说是有效的,除非我找到更好的方法来解决它。

使用 .toString() 方法:

    for (var i=0; i < clients.length; i++) {
      clients[i].send(clients.toString());
    }

然后使用以下代码在客户端对输出进行解释:

var clients = string.split(',');


(注:此内容与IT相关)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接