我有一个Web应用程序,其中一个页面使用套接字。
服务器使用动态名称空间监听连接。
服务器端连接代码:
const SocketIO = require('socket.io')
//...
this.io = SocketIO(server)
this.namespace = this.io.of((name, query, next) => {
// Validation happens here
})
this.namespace.on('connection', socket => {
socket.on('area', function(data) {
socket.broadcast.emit('area', data)
})
})
客户端连接代码:
this.socket = io(`http://localhost:8093/${this.live.id}`) // Namespace name is at this.live.id
this.socket.on('disconnect', reason => console.log('Socket disconnect', reason))
一切正常,除非服务器决定使用以下代码关闭名称空间中的所有连接:
const ns = this.io.of(namespace) // namespace is the specific namespace that needs to be closed
const sockets = Object.keys(ns.connected)
sockets.forEach(id => ns.connected[id].disconnect(true)) // problem still exists whether true parameter is present or not
ns.removeAllListeners()
delete this.io.nsps[namespace]
运行此代码并记录客户端的this.socket
对象时,connected
字段设置为false,而disconnected
字段为true。这意味着该客户端确实已断开连接,但未触发disconnect
事件。
我正在尝试听事件以向用户显示通知,告知他们已断开连接。 connect
或connect_error
之类的所有其他事件侦听器均按预期工作。
打包版本: