我正在研究从动态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地址。如果我刷新页面,一切正常。
你有解决方案吗?
由于
答案 0 :(得分:2)
问题是您没有向刚刚连接的套接字发送到所有其他套接字,因此在收到"ip"
消息客户端之前,您必须与服务器建立第二个连接。
更改
socket.broadcast.emit('ip', {ip: ip})
到
socket.emit('ip', {ip: ip})