Socket.io 服务器断开连接

时间:2021-06-30 15:30:46

标签: javascript sockets socket.io

我正在开发一个聊天应用程序(使用 NodeJS + Socket.IO)。

在我的服务器中,我有一个名为 users 的数组变量,用于存储所有在线用户。

当用户登录时,一个包含所有用户信息的对象被推送到 users 数组中,当它注销时,会发出一个 'user_logout' 事件: >

var users = []; //array of online users

io.on('connect', (socket) => {
  socket.on('user_login',(user)=>{
  //USER LOGS IN
    users.push(user)
  })
  socket.on('disconnect',()=>{
    //USER LOGS OUT
    var message = socket.id + "logs out"; // ERROR: socket is undefined
    io.emit('user_logout',message)
  })
})

正如您从上面的代码片段中看到的,socket 对象似乎未定义,导致我的应用程序崩溃。

仅当用户处于非活动状态一段时间(比如说几分钟)时才会抛出错误,否则它会完美运行!

似乎socket在没有警告的情况下破坏了空闲连接,导致对象socket为空

1 个答案:

答案 0 :(得分:0)

我不确定 socketundefined 上的 disconnect 是否是这里的错误 - 套接字不再连接,因此不再存在。我想这取决于 socket.io 何时正式将引用归零。

我在文档 (https://socket.io/docs/v3/server-api/index.html#Event-%E2%80%98disconnect%E2%80%99) 中找不到太多内容,但我怀疑这是服务器手动调用 disconnect() 与套接字因连接断开或类似情况而断开连接之间的区别。

单独存储 id,或者您可以尝试改用 disconnecting 回调:

<块引用>

当客户端将要断开连接(但还没有离开房间)时触发。