【问题标题】:Socket.io send disconnect event with parameterSocket.io 发送带参数的断开事件
【发布时间】:2017-04-10 12:36:58
【问题描述】:

我想使用自定义参数手动将断开连接事件发送到 socket.io 服务器。我使用了这个功能,但不起作用:

//客户

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

//服务器

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

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

【问题讨论】:

    标签: events parameters socket.io disconnect


    【解决方案1】:

    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)
    })
    

    我希望这会有所帮助:)

    【讨论】:

    • 但是如果客户端已经发送了断开连接事件,那么他会监听 myCustomEvent 的保证是什么?这意味着他没有断开连接对吗?
    • 自定义事件将是它离开之前发出的最后一个事件,并且所有其他仍然连接的剩余套接字都会听到该事件
    • 调用socket.disconnect会触发disconenct事件,服务端会发送到自己的socket,但是触发事件的socket不会收到
    • 断开连接后myCustomEvent 不再发射
    【解决方案2】:

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

    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 的答案。

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 1970-01-01
      • 2013-04-03
      • 2011-11-03
      • 2019-05-01
      • 2013-06-21
      • 1970-01-01
      • 2014-01-08
      • 2016-09-20
      相关资源
      最近更新 更多