浏览器刷新后,我无法再向特定客户端发送信息?

时间:2014-02-12 18:56:18

标签: node.js socket.io

我的代码看起来像这样:

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

1 个答案:

答案 0 :(得分:2)

出现问题是因为当您在服务器启动后首次访问该页面时,您注册了updatePlayer事件,并且此回调“会记住”当前的socket对象。

然后重新加载页面,updatePlayer事件触发,其回调尝试访问“记住”的socketsocket指的是您之前在页面重新加载后丢失的连接。这就是它无法发送消息的原因。

要解决此问题,您必须声明所有变量,这些变量在player回调中以某种方式与io.sockets.on('connection')对象连接。