Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript socket.io中的SetTimeout不';我第一次不工作_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript socket.io中的SetTimeout不';我第一次不工作

Javascript socket.io中的SetTimeout不';我第一次不工作,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在研究一种从托管在动态ip上的节点服务器获取ip地址的解决方案。我遇到的问题是,在第一次启动时,setTimeout函数在服务器端不起作用。我必须刷新一下才能看到它工作 服务器端代码: io.sockets.on('connection', function(socket){ setTimeout(function() { ip = socket.handshake.headers.host; socket.broadcast.emit('ip', {ip: ip})

我正在研究一种从托管在动态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);
});
事实上,在我的客户端第一次启动时,alert或console.log并没有显示ip地址。如果我刷新页面,一切正常

你有什么解决办法吗


谢谢

问题在于您没有发送到刚刚连接的套接字,而是发送到所有其他套接字,因此您必须在客户端收到
“ip”
消息之前与服务器进行第二次连接

改变

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


你好,谢谢,但是你的回答解决了我的一部分问题。事实上,如果我使用emit而不是broadast.emit,我将接收ip地址,但我仅在第一次加载页面时才接收它。超时必须每30秒给我一次ip地址。你有解决办法吗?谢谢你的问题不清楚,但也许你想要
setInterval
而不是
setTimeout
t!(我是辛普森)
socket.emit('ip', {ip: ip})