我正在开发一个聊天应用程序(使用 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为空
答案 0 :(得分:0)
我不确定 socket
在 undefined
上的 disconnect
是否是这里的错误 - 套接字不再连接,因此不再存在。我想这取决于 socket.io 何时正式将引用归零。
我在文档 (https://socket.io/docs/v3/server-api/index.html#Event-%E2%80%98disconnect%E2%80%99) 中找不到太多内容,但我怀疑这是服务器手动调用 disconnect()
与套接字因连接断开或类似情况而断开连接之间的区别。
单独存储 id
,或者您可以尝试改用 disconnecting
回调:
当客户端将要断开连接(但还没有离开房间)时触发。