2012-04-19 121 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