特定のクライアントにデータを送信する必要がある場合があるため、ソケットの連想配列を使用して、接続されているすべての「クライアント」を追跡するnode.jsサーバーがあります。その配列のキーは、で構成される文字列です
socket.remoteAddress + ':' + socket.remotePort
値は、net.createServer(...) に提供されるコールバックに渡されるソケット インスタンスです。クライアントが何らかの理由で切断され、「終了」イベントと「終了」イベントを受け取ることがあります。切断されたクライアントをクライアント レジストリから削除したいのですが、close/end イベント コールバックで、remoteAddress 変数と remotePort 変数が定義されていません。それらをどうにかして取り戻すことはできますか?
説明する:
var registry = {}
var server = net.createServer(function (socket) {
socket.on('connect', function(){
registry [socket.remoteAddress + ':' + socket.remotePort] = socket;
});
socket.on('close', function(had_error){
// ******************************************************
// socket.remoteAddress and remotePort are undefined here
// ******************************************************
var id = socket.remoteAddress + ':' + socket.remotePort;
// *************************************************************
if(registry.hasOwnProperty(id)
delete socket.id;
});
});