Socket.io 发送带参数的断开连接事件

Socket.io send disconnect event with parameter

我想用自定义参数手动发送断开事件到 socket.io 服务器。我使用此功能但无法使用:

//客户端

var userId = 23;
socket.disconnect(user);

//服务器

socket.on('disconnect', function (data) {
        console.log('DISCONNECT: '+  data)
    })

现在如何在发送断开连接事件时向服务器发送附加数据?

Socket IO 的断开连接事件在内部触发,但您可以在调用时发出自定义事件。

您需要先监听断开连接事件。调用此事件后,您应该发出自己的自定义事件,比如我们称之为 myCustomEvent 一旦调用此事件,您的客户应该会监听您的 myCustomEvent 并在听到它时,然后应该输出你传递给它的数据。例如:

io.sockets.on('connection', function (socket) {
  const _id = socket.id
  console.log('Socket Connected: ' + _id)
  // Here we emit our custom event
  socket.on('disconnect', () => {
    io.emit('myCustomEvent', {customEvent: 'Custom Message'})
    console.log('Socket disconnected: ' + _id)
  })
})

然后您的客户端会像这样监听 myCustomEvent

socket.on('myCustomEvent', (data) => {
    console.log(data)
})

希望对您有所帮助:)

我们可以在服务器端管理一个全局数组。

var sockets = [];
io.on('connection', function (socket) {
    const id = socket.id ;

    socket.on('user-join', function(data) {
         sockets[id] = res.id;
    });

    socket.on('disconnect', function(data) { 
        io.emit('user-unjoin', {user_id: sockets[id],status:'offline'}); 
    });
});

在客户端,

socket.on('user-unjoin', function (data) {
    // update status of data.user_id according to your need.
});

此答案灵感来自 Jackthomson 的答案。