2017-06-16 58 views
0

我在nodejs中使用net模块。节点tcp服务器棒数据在一起

net.createServer(function(sock) { 
sock.on('data', function(data) { 
    console.log(data); 
}); 
}); 

然后我试图使用2000个tcp客户端发送数据到服务器来测试它可以支持多少客户端。前20分钟,它运行正常。但是经过一段时间后,这些数据就粘在一起了。例如,来自客户端的数据是在JSON格式和看起来像这样:

“{‘值’:1,‘名称’:‘汤姆’}”

每个客户端发送的数据用不同的名称并且价值会每次增加。从服务器端看,我得到的数据如下:

{“value”:1,“name”:“tom”} {“value”:2,“name”:“tom”} {“value “3,” 名 “:” 汤姆“}。

他们粘在一起,我必须将它们分开并保存为mongodb。

保持服务器运行时间更长时,情况变得更糟。服务器在客户端仍在发送数据时不能接收任何数据。

我想问一下,如何让服务器每次读取一个项目,并且服务器在继续运行时会运行良好。非常感谢。

回答

0

套接字服务器不知道或关心您的数据格式。无论如何,你需要把它分开。在到达您的应用程序之前,它可以被任意缓冲或拆分。事实上,在较低负载情况下结束了很好的分段,这仅仅是因为您的有效负载适合于一个数据包,并且应用程序会在读取缓冲区时保持不变。

最简单的事情就是使用分隔符。由于您使用的是JSON,因此可以使用换行符分隔符。 (只要确保您的JSON对象在每个对象的一行上格式化即可)。

然后,您可以使用缓冲流,等待分隔符并发出解析对象的变换流。

-1

node.js stick package

你试试这个lib下,TCP的粘包问题对Node.js的

+0

的解决方案,同时该链接可以回答这个问题,最好是在这里有答案的关键部位和提供链接供参考。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18167277) – klutt