Node.js tcp socket写错了

时间:2014-05-12 10:04:12

标签: node.js

我遇到了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中遇到同样的问题。

1 个答案:

答案 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 documentationsocket.setNoDelay()的详细信息。