Node.js 节点tcp服务器将数据粘在一起
我正在nodejs中使用net模块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”}” 每个客户端发送
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粘性包问题 重复回答