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

时间:2015-01-27 09:53:14

标签: javascript node.js socket.io

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

服务器端代码:

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);
});

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

你有解决方案吗?

由于

1 个答案:

答案 0 :(得分:2)

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

更改

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

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