2012-04-19 62 views
0

我在節點js中編寫了一個簡單的服務器。在nodejs中更新變量

var tls = require("tls"), fs = require("fs"), sys = require("sys"); 
//Number of messages received 
var received=0; 

var options = { 
    key: fs.readFileSync("certs/keys/server.key"),//Server private key 
    cert:fs.readFileSync("certs/certs/server.crt"),//Server cert. 
    requestCert: true,//Require client to send it's certificate 
    rejectUnauthorized:true, 
    ca:fs.readFileSync("certs/certs/userA.crt") //Root certificate, 
}; 


//Server instance with connection request callback 
var server = tls.createServer(options,function(socket){ 
    //Add a listener for receiving data packets 
    socket.addListener("data", function(data){  
     received++;  
    }); 
}).listen(2195,function(){ 
    console.log("Server started"); 
}); 

我也有java客戶端應用程序,它使服務器發送多個(300)連接併發送消息。問題是變量「received」的值與java端的「send」的值不匹配。對於。例如,如果我從Java應用程序發送100,000條消息,服務器顯示接收值爲80,000,即使所有消息都被服務器成功接收。

我認爲問題是變量接收由多個回調在同一時間更新,因此最終值變得混亂。任何想法如何我可以解決這個問題?

+0

嘗試'socket.addListener(「connect」,...'或'socket.addListener(「end」,...' – DanS 2012-04-19 20:16:10

+0

)您發送的消息!=您實際發送的消息(可能由於錯誤) – Mustafa 2012-04-19 20:36:10

回答

0

TCP/IP不保證發送的數據包數量與接收到的數據包數量相匹配。所以可能發生兩個或多個連續發送的數據包「合併」爲一個。 (請參閱 - >Nagle's algorithm),否則它們會分裂(請參閱 - >IP fragmentation),如果它們不適合MTU