【问题标题】:Socket.IO - how can I tell the server which specific client disconnected?Socket.IO - 我如何告诉服务器哪个特定客户端断开连接?
【发布时间】:2020-03-27 00:34:50
【问题描述】:

我关注了a different S/O answer,想知道如何与我的服务器通信,客户端通过使用断开连接

var socket = io.connect(<your_url>, {
'sync disconnect on unload': true });

问题是,由于这是原始套接字配置的一部分,我无法从服务器上判断我的哪些客户端实际上已断开连接。在我的客户端,我显示了所有已连接客户端的用户名列表,因此我需要知道要从该列表中删除其余客户端的用户名。

客户端关闭时触发的服务器端代码是:

socket.on('disconnect', reason => {
        console.log('user disconnected', reason);
    });

但“原因”变量原来只是一个字符串,上面写着:“传输关闭”,没有关于断开连接的实际客户端的信息。

我想到的一种方法是,每当客户端断开连接时,服务器可以向所有连接的客户端请求响应,并使用它每次都发送更新的列表,但这似乎过分了。我更希望知道哪个客户端在断开连接时断开连接,并简单地广播新断开连接的客户端的 ID,以便其他客户端能够在本地更新各自的用户列表。毕竟,当一个新客户端加入时,我会广播该客户端的用户名,因此所有客户端都可以在本地更新 - 我想在客户端断开连接时使用相同的模式。

简而言之,有没有人知道在 socket.io 的“卸载时同步断开”配置中,也可以在卸载时发送客户端的 ID?

【问题讨论】:

    标签: javascript websocket socket.io


    【解决方案1】:

    结果我需要在活跃参与者的服务器中保留一个数组,每次连接时添加。

    let users = []
    socket.on('join', data => {
       data.id === socket.id
       users.push(data)
    })
    
    socket.on('disconnect', reason => {
       let user = users.find(u => u.id === socket.id)
       // we emit an event from the server, not from a particular socket
       io.emit('player disconnected', {
          user
       }
    })
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-17
      • 2018-02-09
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2021-12-22
      • 2011-06-30
      • 2012-02-24
      相关资源
      最近更新 更多