【问题标题】:Why does socket.disconnect disconnect the wrong user?为什么 socket.disconnect 断开错误的用户?
【发布时间】:2015-04-24 02:05:53
【问题描述】:

我的网站有一个连接了多个用户的 IM。我希望从我的客户断开特定用户的连接。这是我正在尝试的代码:

  // client side
function deleteUser(delCallsign)
     {
          delCallsign = delCallsign.toUpperCase();
            socket.emit('deleteuser', delCallsign); // send it to the server for delete
     }

// server side
socket.on('deleteuser', function(callsign)
   {
        socket.disconnect(usernames[callsign]);
      io.sockets.emit('updateusers', usernames);
    });

使用警报,我已验证我正在使用我希望断开连接的用户名调用服务器端函数。但是发生的事情是我断开连接,而不是指定的用户。我在这里做错了什么?

【问题讨论】:

  • 该数组是否包含您要断开连接的个人的 socket.id?这也可能是相关的stackoverflow.com/questions/25976501/…
  • 抱歉,忘了说 - usernames 数组包含用户名。
  • 但是有什么东西可以通过用户的 socket.id 断开连接... socket.disconnect() 需要一个 socket.id 参数,否则它将落入其默认行为正在关闭套接字。
  • 嗯,不,这解释了为什么它断开了我而不是所需的用户。当用户连接时,它们存储在套接字会话中,socket.username = username;并使用 usernames[username] = username 到数组;那么我将如何获取要断开连接的用户的 socket.id 呢?

标签: socket.io


【解决方案1】:

在用户连接时,你应该记录它的 socket.id,然后你会调用它来删除

io.sockets.on('connection',function(socket){
      // Asign socket.id to variable 
      // socket.id;
});

socket.on('deleteuser', function(callsign) {
      io.sockets.connected[usernames[callsign].id].disconnect();
      io.sockets.emit('updateusers', usernames);  
});

大概是这样。

根据这些帖子:

SocketIO: disconnect client by socket id?

Get the client id of the message sender in socket.io?

-- 更多相关--

有点旧,但原则相同

how do I store socket resources from specific users with socket.io?

【讨论】:

  • 感谢马斯克,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2015-09-02
  • 1970-01-01
  • 2020-11-14
相关资源
最近更新 更多