socket.io聊天添加用户名断开连接
socket.io chat add user name to disconnect
我是 socket.io 的新手。我一直在研究这个消息聊天。当用户登录并提交消息时,我能够将用户名添加到聊天中,但对于我来说,当用户断开连接时,我无法让它读取用户名。也许我在这方面工作的时间太长了,但答案不应该那么难,因为我有用于连接和提交的用户名。
这是我在客户端的。
socket.on('connect', () => {
// emiting to everybody
socket.emit('join', { room: room, name: name });
})
name 保存登录的用户名。
在服务器端我有这个。
socket.on('join', (data) => {
socket.join(data.room);
tech.in(data.room).emit('message', `${data.name} joined ${data.room} room!`);
})
socket.on('disconnect', (data) => {
console.log('user disconnected');
tech.emit('message', 'user disconnected' + data.name );
})
连接工作正常,当用户连接时,我得到用户名已加入房间,但对于断开连接“用户断开连接未定义”,我得到未定义。不识别 var。我猜我需要发出它以在客户端断开连接?这看起来应该很容易,但给我带来了问题。
如有任何帮助,我们将不胜感激。谢谢
io.use((socket: any, next: any) => {
//you can do authentication in this middleware
// you can also validate query data here => socket.handshake.query
if (authenticated){
socket.data.groupid = socket.handshake.query.groupid;
next();
}else{
return new Error('Authentication error')
}
})
.on('connection',socket:any) => {
socket.join(socket.data.groupid, () => {
// you can join the room from inside here
});
socket.on('disconnect', () => {
//you can handle disconnect event here
});
})
在服务器端,你可以这样做:
let users = {}
io.of('/test').on('connection', (socket) => {
socket.on('join', (data) => {
socket.join(data.room);
users[socket.id] = data;
io.of('/test').to(data.room).emit('message', `${data.name} joined ${data.room} room!`);
})
socket.on('disconnect', () => {
io.of('/test').emit('message', 'user disconnected ' + users[socket.id].name);
delete users[socket.id];
})
})
由于您没有存储事件负载,所以我将其存储在一个对象中 'users'。您也可以将其存储在缓存中
另外我想提一下 disconnect 事件不支持参数。您可以参考下面的link。
https://socket.io/docs/v3/client-api/#socket-disconnect
我是 socket.io 的新手。我一直在研究这个消息聊天。当用户登录并提交消息时,我能够将用户名添加到聊天中,但对于我来说,当用户断开连接时,我无法让它读取用户名。也许我在这方面工作的时间太长了,但答案不应该那么难,因为我有用于连接和提交的用户名。
这是我在客户端的。
socket.on('connect', () => {
// emiting to everybody
socket.emit('join', { room: room, name: name });
})
name 保存登录的用户名。
在服务器端我有这个。
socket.on('join', (data) => {
socket.join(data.room);
tech.in(data.room).emit('message', `${data.name} joined ${data.room} room!`);
})
socket.on('disconnect', (data) => {
console.log('user disconnected');
tech.emit('message', 'user disconnected' + data.name );
})
连接工作正常,当用户连接时,我得到用户名已加入房间,但对于断开连接“用户断开连接未定义”,我得到未定义。不识别 var。我猜我需要发出它以在客户端断开连接?这看起来应该很容易,但给我带来了问题。
如有任何帮助,我们将不胜感激。谢谢
io.use((socket: any, next: any) => {
//you can do authentication in this middleware
// you can also validate query data here => socket.handshake.query
if (authenticated){
socket.data.groupid = socket.handshake.query.groupid;
next();
}else{
return new Error('Authentication error')
}
})
.on('connection',socket:any) => {
socket.join(socket.data.groupid, () => {
// you can join the room from inside here
});
socket.on('disconnect', () => {
//you can handle disconnect event here
});
})
在服务器端,你可以这样做:
let users = {}
io.of('/test').on('connection', (socket) => {
socket.on('join', (data) => {
socket.join(data.room);
users[socket.id] = data;
io.of('/test').to(data.room).emit('message', `${data.name} joined ${data.room} room!`);
})
socket.on('disconnect', () => {
io.of('/test').emit('message', 'user disconnected ' + users[socket.id].name);
delete users[socket.id];
})
})
由于您没有存储事件负载,所以我将其存储在一个对象中 'users'。您也可以将其存储在缓存中
另外我想提一下 disconnect 事件不支持参数。您可以参考下面的link。 https://socket.io/docs/v3/client-api/#socket-disconnect