在nodejs中更新变量

时间:2012-04-19 20:01:47

标签: node.js

我在节点js中写了一个简单的服务器。

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,即使服务器已成功接收到所有消息。

我认为问题是变量收到的是同时由多个回调更新,因此最终值变得混乱。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

TCP / IP不保证发送的数据包数量与收到的数据包数量相匹配。因此,可能会发生两个或多个连续发送的数据包“合并”为一个。 (请参阅 - > Nagle's algorithm)或者如果它们不适合IP fragmentation,它们会被拆分(请参阅 - > MTU)。