2014-05-12 105 views
1

我有一个nodejs的问题。我有一个python扭曲TCP服务器,当我试图做到这一点:Node.js 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个消息,扭曲接收"1 message \r\n 2 message \r\n")

当然,我测试使用Python和PHP,C++和它的工作原理。但是我在nodejs中做同样的事情时遇到了麻烦。

+0

你能展示一段服务器端代码吗?可能也是其他客户的一部分? – Miichi

+0

扭曲我从例子(回声服务器),它工作正常。 – alldroll

回答

0

TCP不一定以行方式发送数据。所以,如果你有你的服务器端的东西,如

class Echo(protocol.Protocol): 
    def dataReceived(self, data): 
     ---do something with data--- 

然后TCP不保证多久会调用dataReceived。原则上,可以用“1消息\ r \ n2消息\ r \ n”两次调用一次,“1消息\ r \ n”和“2消息\ r \ n”两次调用,但也可以不同地分割,例如,用“1 mes”和“sage \ r \ n2message”两次。

您可以强制的node.js如下每次通话后“刷新”写入缓冲区到插座socket.write

socket.setNoDelay(true); 

(必须在socket.write之前调用,当然)。

wikipedia article on TCP提供了关于TCP的更多细节,特别是与“强制数据传递”部分相关的内容。有关socket.setNoDelay()的详细信息,请参阅node.js documentation