在带有node.js的socket.io中,如何确定特定连接的服务器IP?

时间:2013-04-26 21:32:37

标签: node.js express websocket socket.io

最终,这里的目标是使用socket.io处理DNS循环,以协调不同的连接(socket.io和jQuery ajax),以便当一个名称映射到多个服务器时,它们将转到同一服务器。

使用此代码,我可以找到传入的websockets连接的客户端端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,因此客户端不会在同一个itme上与不同的服务器通信。

编辑:Get local IP address in node.js没有回答我的问题。回答说:“我的IP地址列表是什么。”我的问题是,“给定一个特定的套接字,该特定套接字的本地地址(IP和端口)是什么”,通过从操作系统获取地址列表,无法在多宿主主机上应答。在Java或C#中,获取套接字的本地和远程端口以及IP地址是微不足道的。如何在node.js中为socket.io“socket”连接执行此操作?

1 个答案:

答案 0 :(得分:1)

Socket.IO正在侦听websocket请求,但它是在Express建立的HTTP连接上执行的。您可以找到Express接受HTTP连接的地址,如下所示:

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

也就是说,在找出接受地址之前,不要等待websocket请求;如果你想在Socket.IO连接事件期间想要它,你可以将它存储起来。