Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点tcp服务器将数据粘在一起_Node.js_Tcpserver - Fatal编程技术网

Node.js 节点tcp服务器将数据粘在一起

Node.js 节点tcp服务器将数据粘在一起,node.js,tcpserver,Node.js,Tcpserver,我正在nodejs中使用net模块 net.createServer(function(sock) { sock.on('data', function(data) { console.log(data); }); }); 然后,我尝试使用2000个tcp客户端向服务器发送数据,以测试它可以支持多少个客户端。在最初的20分钟里,它运行正常。但一段时间后,数据粘在一起。例如,来自客户端的数据是json格式的,如下所示: “{“value”:1,“name”:“tom”}” 每个客户端发送

我正在nodejs中使用net模块

net.createServer(function(sock) {
sock.on('data', function(data) {
    console.log(data);
});
});
然后,我尝试使用2000个tcp客户端向服务器发送数据,以测试它可以支持多少个客户端。在最初的20分钟里,它运行正常。但一段时间后,数据粘在一起。例如,来自客户端的数据是json格式的,如下所示:

“{“value”:1,“name”:“tom”}”

每个客户端发送的数据的名称和值都不同,每次都会递增。从服务器端,我得到的数据如下所示:

{“值”:1,“名称”:“汤姆”}{“值”:2,“名称”:“汤姆”}{“值”:3,“名称”:“汤姆”}

它们粘在一起,我必须把它们分开,保存到mongodb中

如果让服务器运行更长时间,情况会变得更糟。当客户端仍在发送数据时,服务器无法接收任何数据


我想问一下,如何使服务器每次读取一个项目,并且服务器在继续运行时能够正常工作。非常感谢。

套接字服务器不知道或不关心您的数据格式。不管怎样,你都需要把它分开。它可以在到达应用程序之前被任意缓冲或分割。事实上,你在较低的负载下得到了不错的数据段,这只是因为你的有效负载适合单个数据包,而应用程序在缓冲区到来时一直在读取缓冲区

最简单的方法是使用分隔符。因为您使用的是JSON,所以可以使用换行符delimeter。(只需确保JSON对象的格式为每对象一行。)

然后,您可以使用一个变换流来缓冲该流,等待delimeter,并发出解析的对象


您可以尝试这个lib,解决Node.Js的TCP粘性包问题。这个存储库可以帮助您解决Node.Js的TCP粘性包问题

重复回答