我遇到了nodejs的问题。我有一个python twisted tcp服务器,当我尝试这样做时:
var socket = server.net.createConnection(server.controllerPort,
server.controllerHost);
socket.on('data', function(data) {
log('RESPONSE: ' + data);
});
socket.on('connect', function() {
socket.write("1 message \r\n");
socket.write("2 message \r\n");
socket.destroy();
});
而不是2条消息,twisted接收"1 message \r\n 2 message \r\n")
当然,我通过使用python,php,c ++进行了测试,但它确实有效。但我在nodejs中遇到同样的问题。
答案 0 :(得分:1)
TCP不一定按行发送数据。因此,如果您在服务器端有类似
的内容class Echo(protocol.Protocol):
def dataReceived(self, data):
---do something with data---
然后TCP不保证调用dataReceived的频率。原则上,它可以用" 1消息\ r \ n \ n \ n \ n消息\ r \ n"一次调用,两次用" 1消息\ r \ n"和" 2消息\ r \ n",但也有不同的分割,例如两次用" 1 mes"和" sage \ r \ n2message"。
您可以强制node.js进行" flush"每次调用socket.write
后写入缓冲区,如下所示:
socket.setNoDelay(true);
(当然必须在socket.write
之前调用。)
wikipedia article on TCP提供了有关TCP的更多详细信息,尤其相关的是“强制数据传送”部分"。 node.js documentation中socket.setNoDelay()
的详细信息。