1
node.jsでtcpサービスを構築し、利用可能な情報を把握するための基礎を学ぶために、単純なエコーサーバーを構築しています。Nodejs TCPソケットの終了時にremoteAddress情報が含まれていない
以下に示すように、サーバーを作成しているときに、リモートアドレスなどのincomingSocketに関する情報にアクセスできます。なぜ私はソケットのクローズに関する情報にアクセスできないのですか?以下は私のコードです。私のコメントは私が受け取った出力を示しています。
var net = require ('net');
var server = net.createServer (
function (incomingSocket)
{
//'connection' listener
console.log ('Connection from ' + incomingSocket.remoteAddress + ':' + incomingSocket.remotePort + " established.");
incomingSocket.on (
'data' ,
function (data)
{
// The incomingSocket.remoteAddress is defined here
console.log (incomingSocket.remoteAddress + ':' + incomingSocket.remotePort + ' -> ' + data.toString());
}
);
incomingSocket.on (
'close' ,
function()
{
// The incomingSocket.remoteAddress is undefined here
console.log ('connection from ' + incomingSocket.remoteAddress + ' closed.');
}
);
incomingSocket.pipe (incomingSocket);
}
);
// listening to a port happens here
私は任意の応答を感謝します!ありがとうございました!
回答ありがとうございます。私はnode.js上でtcpサーバを使う方法を学びたかったので、簡単なchatroomサーバを作ることから始めました。私は新しい接続が行われるたびに現在存在する接続のリストに追加を保存し、ある接続からのデータが届くと、それを他のすべての接続を通して送信します。私がする必要があるのは、切断された接続を削除することです。これを行うには、接続のリストから削除できるように、ポートとアドレスを知る必要があります。 この問題を解決する方法を教えてください。 –
リモートアドレスとポートの保存方法によって異なります。私が行うことは、接続時にそれらの組み合わせを配列に追加し、ソケットが閉じられたときにそれらを配列から削除することです。配列は、その 'function(socket){'クロージャーでアクセス可能なスコープで定義されなければなりません。 – dwieeb
それは私がやったことです。ソケットを閉じるときにソケットを配列から取り除く時が来たら、変数socketは何も格納しません。 –