如何避免客户断线导致的竞争条件?

时间:2013-01-24 02:03:18

标签: node.js socket.io

所以,我现在正在做的是在收到新连接时创建一个新的客户端对象,并将它们存储在一个自我管理的对象中;在用户断开连接时,我正在删除该对象。这是它的样子的基础:

var socketobj = {};

io.sockets.on('connection', function(socket){
    socketobj[socket.id] = socket;

    socket.on('disconnect', function(data){
        delete socketobj[socket.id];
    });
});

我正在使用这些客户端对象中的每一个以socketobj[socket.id].user = username;

的形式存储额外信息,例如关联的用户名等

我遇到的问题是我的代码的一部分将会运行,如果客户端在服务器访问其客户端对象之前断开连接,它将显示为未定义(因为该对象刚被删除) ,它会引发异常。

如何防止这种情况发生?至少,我怎样才能阻止错误在每次抛出服务器时崩溃?

1 个答案:

答案 0 :(得分:-2)

好的,我不知道它是基于事件而不是多线程的,这是一个新答案。

在访问之前,只需检查条目是否存在。如果没有,它就会被删除,你可以做任何事情/不同的事情。