socket.io 中的 SetTimeout 第一次不起作用

SetTimeout in socket.io doesn't working the first time

我正在研究一种从动态 ip 上托管的节点服务器获取 ip 地址的解决方案。我遇到的问题是函数 setTimeout 在第一次启动时在服务器端不起作用。我必须刷新才能看到它正常工作。

服务器端代码:

io.sockets.on('connection', function(socket){

  setTimeout(function() {
    ip = socket.handshake.headers.host;
    socket.broadcast.emit('ip', {ip: ip})
  }, 30000);

});

客户端代码

var socket = io.connect();

socket.on('ip', function(data){;
  alert(data.ip);
});

事实上,在第一次启动我的客户端时,警报或 console.log 没有向我显示 IP 地址。如果我刷新页面,一切正常。

你有解决办法吗?

谢谢

问题是您没有向刚刚连接的套接字发送信号,而是向所有其他套接字发送信号,因此在客户端收到 "ip" 消息之前,您必须与服务器建立第二个连接。

改变

socket.broadcast.emit('ip', {ip: ip})

socket.emit('ip', {ip: ip})