套接字io:如何传递参数来解除套接字事件?

我正在使用套接字io来构build聊天应用程序。

当“用户x”从聊天中断我想打印到控制台日志:“再见用户x”。

为了发生这种情况,我需要将user_name作为parameter passing给disconnect事件。

问题是我不知道如何将数据传递给断开连接事件:

socket.on('disconnect', function(){...}) 

当用户断开连接时被自动调用。

我需要有类似的东西

 socket.on('disconnect', function(user_name){ console.log('bye '+user_name); }) 

但如果这是可能的(是吗?)那么我怎么能通过这个参数在客户端(我的情况,angular)?

我的完整套接字io server.js代码如下。

 io.on('connection', function(socket){ io.emit('chat_message', "welcome"); socket.on('room', function(room) { socket.join(room); }); socket.on('chat_message', function(data){ socket.broadcast.to(data.room).emit('chat_message',data.msg); }); socket.on('info_message', function(data){ socket.broadcast.to(data.room).emit('info_message',data.msg); }); socket.on('disconnect', function(){ console.log('bye '+socket.id); io.emit('chat message', "Bye"); }); }); 

您无法将数据传递到断开连接事件。 但是,您可以在早期将您自己的属性附加到socket对象,或者您可以使用附加信息保留自己的套接字映射。

你只需要确保服务器知道每个套接字的用户名(我不能告诉你的问题,如果用户名是客户端或服务器端的一块数据)。 然后,您可以将它作为属性附加到套接字对象。 这样做后,当你得到断开连接事件,你可以看看在断开的套接字属性。

所以,无论用户名信息来自哪里,你都可以在服务器知道它是什么时在套接字对象上设置这个属性,然后你可以在断开连接的时候这样做:

 socket.on('disconnect', function(){ console.log('bye ' + socket.user_name); }); 

或者,如果用户名在cookie中,则可以随时通过parsingsocket.handshake.headers.cookie来获取该cookie值。