2012-04-19 2 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"); 
}); 

는 또한 서버에 여러 (300) 연결을 만들고 메시지를 보내는 자바 클라이언트 응용 프로그램이 있습니다. 문제는 변수 "received"의 값이 자바 측 "send"의 값과 일치하지 않는다는 것입니다. 에 대한. 예를 들어, Java 애플리케이션에서 100,000 개의 메시지를 보내면 모든 메시지가 서버에 의해 성공적으로 수신 되었더라도 서버는 수신 된 값을 80,000으로 표시합니다.

내가받은 변수가 여러 콜백에 의해 동시에 업데이트되어 결국 최종 값이 엉망이되었다고 생각합니다. 이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까?

+0

시도해보십시오. socket.addListener ("connect", ...'또는 ... socket.addListener ("end", ...' – DanS

+0

보낸 메시지! = 실제로 보낸 메시지 – Mustafa

답변

0

TCP/IP는 전송 된 패킷 수가 수신 된 패킷 수와 일치 함을 보장하지 않습니다. 따라서 두 개 이상의 연속 된 전송 패킷이 하나로 결합됩니다. (->Nagle's algorithm 참조) 또는 MTU에 맞지 않으면 분할됩니다 (참조 ->IP fragmentation).