2014-05-12 104 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