2012-04-19 12 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)の接続を行い、メッセージを送信するJavaクライアントアプリケーションを持っています。問題は、変数 "received"の値がJava側の "send"の値と一致しないことです。ために。たとえば、Javaアプリケーションから100,000のメッセージを送信すると、すべてのメッセージがサーバーによって正常に受信されたにもかかわらず、受信した値が80,000と表示されます。

私は、受信した変数が複数のコールバックによって同時に更新されていると考えています。したがって、最終的な値が乱れています。どのように私はこれを解決することができます上の任意のアイデア?

+0

実際に送信したメッセージ(エラーが多分あるため)は、あなたが実際に送信したメッセージ!= socket.addListener( "connect"、...またはsocket.addListener( "end"、... ' – DanS

+0

) – Mustafa

答えて

0

TCP/IPは、送信されたパケットの数が受信したパケットの数と一致することを保証しません。したがって、2つ以上の連続送信パケットが1つに「結合」されることがあります。 (→Nagle's algorithmを参照)、またはMTUに収まらない場合は分割されます(→IP fragmentationを参照)。

関連する問題