Javascript Socket.IO,导航器选项卡有问题
我正在使用Socket.IO,发现了一个大问题。我正在尝试进行实时聊天:一个用户登录,选择另一个已连接的用户并聊天,所以(…) 问题就在这里;某些用户连接时,服务器会分配一个id(socket.id),但如果同一用户在同一导航器中打开更多选项卡,socket.id将更改,因此用户将不会在其他选项卡中收到该消息 我想为某些登录用户打开的所有选项卡存储相同的socket.id;因此,如果该用户收到任何消息,将显示在所有选项卡中Javascript Socket.IO,导航器选项卡有问题,javascript,node.js,session,tabs,socket.io,Javascript,Node.js,Session,Tabs,Socket.io,我正在使用Socket.IO,发现了一个大问题。我正在尝试进行实时聊天:一个用户登录,选择另一个已连接的用户并聊天,所以(…) 问题就在这里;某些用户连接时,服务器会分配一个id(socket.id),但如果同一用户在同一导航器中打开更多选项卡,socket.id将更改,因此用户将不会在其他选项卡中收到该消息 我想为某些登录用户打开的所有选项卡存储相同的socket.id;因此,如果该用户收到任何消息,将显示在所有选项卡中 ?解决方案?唯一的方法是将每个用户的所有socketID组成一个数组,并
?解决方案?唯一的方法是将每个用户的所有socketID组成一个数组,并在向该用户发送特定消息时发送给所有用户。。。我也遇到过类似的问题,这就是我使用的解决方案
socket.on('newUser', function ( data ) {
user.userName = data.name, // Selected name
if ( !user.userId ) user.userId = {};
user.userId.push(socket.id);
Users.push( user );
socket.emit('me', user); // Emit the user object
socket.emit('userList', { users : Users }); // Emit the user list
});
socket.on('disconnect', function () {
Users.userId.remove( socket.id );
if ( Users.userId.length === 0 ) Users.remove(user);
socket.emit('userList', { users : Users }); // emit again the user list for refresh
});
socket.on('clientMessage', function ( data ) {
io.sockets.socket(data.to).emit('newMessage', {
// data.to is the socket ID that a message is sent
"from" : data.from,
"message" : data.message,
"date" : new Date()
});
});
});
我还没有运行代码。这实际上是为了了解如何处理多个套接字连接。你可以用更优雅的方式来写 唯一的方法是将每个用户的所有socketID组成一个数组,如果有特定消息发送给该用户,则发送给所有用户。。。我也遇到过类似的问题,这就是我使用的解决方案
socket.on('newUser', function ( data ) {
user.userName = data.name, // Selected name
if ( !user.userId ) user.userId = {};
user.userId.push(socket.id);
Users.push( user );
socket.emit('me', user); // Emit the user object
socket.emit('userList', { users : Users }); // Emit the user list
});
socket.on('disconnect', function () {
Users.userId.remove( socket.id );
if ( Users.userId.length === 0 ) Users.remove(user);
socket.emit('userList', { users : Users }); // emit again the user list for refresh
});
socket.on('clientMessage', function ( data ) {
io.sockets.socket(data.to).emit('newMessage', {
// data.to is the socket ID that a message is sent
"from" : data.from,
"message" : data.message,
"date" : new Date()
});
});
});
我还没有运行代码。这实际上是为了了解如何处理多个套接字连接。你可以用更优雅的方式来写