我想手动将disconnect事件与custom参数一起发送到socket.io服务器。我使用此功能但不起作用:
//客户端
var userId = 23;
socket.disconnect(user);
//服务器
socket.on('disconnect', function (data) {
console.log('DISCONNECT: '+ data)
})
现在,如何在发送断开连接事件时向服务器发送其他数据?
答案 0 :(得分:5)
Socket IO的disconnect事件在内部触发,但您可以在调用它时发出自定义事件。
您需要先收听断开连接事件。调用此事件后,您应该发出自己的自定义事件,然后我们称之为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)
})
})
然后,您的客户会像{<1>}那样收听myCustomEvent
socket.on('myCustomEvent', (data) => {
console.log(data)
})
我希望这会有所帮助:)
答案 1 :(得分:0)
我们可以在服务器端管理全局阵列。
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.
});
此答案的灵感来自杰克森姆森的答案。