我的代码看起来像这样:
io.sockets.on('connection', function(socket) {
player.on('updatePlayer', function(err, result) {
if(result) {
console.log("UPDATING PLAYER");
io.sockets.socket(socket.id).emit('updatePlayer', { player: player });
}
});
}
当我第一次启动服务器并加载网站时,一切正常。如果我执行的操作会触发" updatePlayer" event我的控制台看起来像这样:
UPDATING PLAYER
debug - websocket writing 5:::{DATA IM SENDING}
刷新页面后,关闭页面并重新加载后,我只得到:
UPDATING PLAYER
任何人都知道为什么套接字根本不会发出任何东西? 它似乎忽略了
io.sockets.socket(socket.id).emit('updatePlayer', { player: player });
答案 0 :(得分:2)
出现问题是因为当您在服务器启动后首次访问该页面时,您注册了updatePlayer
事件,并且此回调“会记住”当前的socket
对象。
然后重新加载页面,updatePlayer
事件触发,其回调尝试访问“记住”的socket
。 socket
指的是您之前在页面重新加载后丢失的连接。这就是它无法发送消息的原因。
要解决此问题,您必须声明所有变量,这些变量在player
回调中以某种方式与io.sockets.on('connection')
对象连接。