3

最終的に、ここでの目標は、socket.io で DNS ラウンド ロビンを処理し、異なる接続 (socket.io と jQuery ajax) を調整して、1 つの名前が複数のサーバーにマップされたときに同じサーバーに移動することです。

このコードを使用すると、着信 Websocket 接続のクライアント側 IP アドレスを見つけることができます。

var app = express();
   ...
var server = http.createServer(app);
   ...
var io = socketio.listen(server);
io.on('connection', function(socket) {
  var addr = socket.handshake.address;
  logger.info("Just got incoming connection from client " + addr.address
              + ":" + addr.port);

しかし、このソケットのサーバー側の IP アドレスを見つけるにはどうすればよいでしょうか? サーバー側の IP アドレスを (を使用して) クライアントに送信したいsocket.emit('serverSideIp': <server-IP>)ので、診断目的で、どの特定の IP アドレスが使用されているかを追跡できます。また、socket.io 接続が失敗して別の IP に移動した場合、クライアント側の AJAX 要求をその IP にリダイレクトして、クライアントが同じ項目で別のサーバーと通信しないようにします。

編集: node.js でローカル IP アドレスを取得しても、私の質問には答えません。 「私の IP アドレスのリストは何ですか」という回答がありました。私の質問は、「特定のソケットが与えられた場合、その特定のソケットのローカル アドレス (IP とポート) は何ですか」というものです。マルチホーム ホストでは、OS からアドレスのリストを取得しても答えられません。Java または C# では、ソケットのローカルおよびリモート ポートと IP アドレスを取得するのは簡単です。socket.io「ソケット」接続のためにnode.jsでこれを行うにはどうすればよいですか?

4

1 に答える 1

1

Socket.IO は Websocket リクエストをリッスンしていますが、Express によって確立された HTTP 接続でリッスンしています。次のように、Express が HTTP 接続を受け入れたアドレスを見つけることができます。

app.get('/', function (req, res) {
    console.log(req.socket.address());

つまり、受け入れアドレスを把握する前に Websocket リクエストを待たないでください。Socket.IO接続イベント中に必要な場合は、後で保存できます。

于 2013-04-27T01:45:35.723 に答える