服务器调用断开连接时不会触发客户端断开连接事件

时间:2019-11-28 22:27:26

标签: javascript node.js express vue.js socket.io

我有一个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事件。

我正在尝试听事件以向用户显示通知,告知他们已断开连接。 connectconnect_error之类的所有其他事件侦听器均按预期工作。

打包版本:

  • socket.io:^2.3.0
  • socket.io-client:^ 2.3.0

0 个答案:

没有答案