Javascript Socket.IO,导航器选项卡有问题

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组成一个数组,并

我正在使用Socket.IO,发现了一个大问题。我正在尝试进行实时聊天:一个用户登录,选择另一个已连接的用户并聊天,所以(…)

问题就在这里;某些用户连接时,服务器会分配一个id(socket.id),但如果同一用户在同一导航器中打开更多选项卡,socket.id将更改,因此用户将不会在其他选项卡中收到该消息

我想为某些登录用户打开的所有选项卡存储相同的socket.id;因此,如果该用户收到任何消息,将显示在所有选项卡中


?解决方案?

唯一的方法是将每个用户的所有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() 

        });
    });
});
我还没有运行代码。这实际上是为了了解如何处理多个套接字连接。你可以用更优雅的方式来写