使用Socket.io

时间:2018-09-17 23:35:34

标签: javascript arrays node.js sockets socket.io

我正在测试我的node.js服务器的性能,并且发现此小代码持续了太多时间:

socket.emit("a",{a1:something,a2:veryBigArray});

问题是我的数组很大,socket.io必须将其编码为JSON。 我的数组是这样的:

veryBigArray=[{x:0,y:0},{x:0,y:1},{x:1,y:1},{x:1,y:2}.......];

我主要对服务器性能感兴趣。我希望服务器可以尽快继续工作。

在将数组发送到客户端之前,我会生成数组,因此完全改变发送数据的结构没有问题。也许数组可以以某种方式压缩。我读到有关ArrayBuffer的信息;

使用Socket.io向客户端(浏览器)发送大量坐标的最佳方法(最快)是什么?

1 个答案:

答案 0 :(得分:1)

如果必须将数组编码为JSON,那么我认为ArrayBuffer不会有帮助。但是,如果您知道要发送的数组的精确数据结构并可以在服务器端进行预测,则可以提出自己的有效编码/解码方案。

在您的示例中,您的数据只是xy个值对的数组,其中每个值都是整数。一种非常简单但可能会富有成果的方法是剥离可预测(不必要)的xy键的数据,并将其编码为简单的CSV(逗号分隔值)字符串。

例如:

[{x:0,y:0},{x:0,y:1},{x:1,y:1},{x:1,y:2}]

将编码为字符串:

0,0,0,1,1,1,1,2

然而,最有效的方法可能是放弃socket.io来创建自己的自定义Websocket接口,该接口可以以某种方式直接发送二进制数据,而不是将其编码为JSON。与发送编码的二进制文件相比,JSON对于发送大型数据集本质上是效率低下的。

编辑:socket.io 可以发送二进制数据,因此我将探索它以及适合您的数据集的某种有效编码/解码方案。