如何分离node.js中的TCP套接字消息

我正在用TCP套接字切割我的牙齿,并且对消息如何到达我的应用程序感到困惑。 好像他们分手了 任何人都知道如何才能最好地把他们一起回来? 所有消息由换行符分隔(\ r \ n)

var stream = net.createConnection(port,host); stream.setEncoding("utf8"); stream.on('data', function(chunk){ console.log('data: ' + sys.inspect(chunk)); }); 

转储到控制台的示例如下所示:

 data: '0' data: '5293800791D04\r' data: '\n' data: '053138007928F1\r\n' data: '05313800012869\r\n' data: '052E3800790E0E\r\n' data: '052E3800010E86\r\n' data: '05223' data: '8007933F5\r\n' data: '05213800791019\r\n' data: '05213800795C795B79265A\r\n' data: '05213800011091\r\n' 

我需要在linebreak中打破东西,所以我没有不完整的消息。 有没有办法告诉节点为我做这个? 如果没有,有没有人有这样做的样本?

我find了一个名为“carrier”的模块,它正是我所需要的。 安装模块之后,添加这个操作非常简单:

 carrier.carry(stream, function(line) { console.log("line: "+line) }) 

我在这里find了答案:

http://nodetuts.com/tutorials/5-a-basic-tcp-chat-server.html

https://github.com/pgte/carrier

由于TCP是一个stream协议 (而不是块协议 ),因此它不会在你认为是单独的消息之间保持任何界限。 如果您需要重新汇编传入stream中的高级消息,则这是接收方的责任。

您可以通过添加一个将input数据读入缓冲区的图层,然后每当在inputstream中看到一个\r\n来释放一行。

另外,如果您可以将stream数据更改为仅包含一个分隔符(例如\n ),则缓冲代码可能会变得更简单一些。