套接字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值。