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})
我正在研究一种从动态 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})