我正在使用socket io构建聊天应用程序。
当“用户x”从聊天中断开时我要打印到控制台日志:“再见用户x”。
为了实现这一点,我需要将user_name作为参数传递给disconnect事件。
问题是我不知道如何将数据传递给disconnect事件:
socket.on('disconnect', function(){...})
当用户断开连接时会自动调用它。
我想要像
这样的东西socket.on('disconnect', function(user_name){
console.log('bye '+user_name);
})
但是如果可以的话(是吗?)那么如何在客户端传递这个参数(我的情况,角度)?
我的完整套接字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");
});
});
答案 0 :(得分:2)
您无法将数据传递给disconnect事件。但是,您可以在较早的时候将自己的属性附加到socket
对象,或者您可以使用其他信息保留自己的套接字映射。
您只需要确保服务器知道每个套接字的用户名(如果用户名是客户端或服务器端数据,我无法从您的问题中得知)。然后,您可以将其作为属性附加到套接字对象。执行此操作后,当您获得disconnect事件时,您可以查看正在断开连接的套接字上的该属性。
因此,无论用户名信息来自哪里,您都可以在服务器知道它的情况下在套接字对象上设置该属性,然后您可以为断开连接执行此操作:
socket.on('disconnect', function(){
console.log('bye ' + socket.user_name);
});
或者,如果用户名在cookie中,您可以通过解析socket.handshake.headers.cookie
随时获取该cookie值。