2017-02-28 80 views
1

我有一个聊天,写在node.js和socket.io上。目前我在浏览器中同步用户标签。我注意到,如果用户向服务器和服务器发送事件,我会将事件响应给除了当前套接字(socket.broadcast.to)以外的其他用户,则响应将发送给当前用户(发送请求的人)在其他选项卡。任何建议,以避免这一点?与多个标签同步的Socket.io

回答

1

已解决。我刚刚创建了一个连接列表,用于存储用户的用户标识和套接字ID。此外,broadcast.to(room id)呼叫更改为以下片段

var currentSocketIds = getSocketIdsByUserId(currentUid); 
var sockets = io.sockets.adapter.rooms[roomId].sockets; 
for(var socketId in sockets) { 
    var isSocketOfCurrentUser = false; 
    for(var i = 0;i < currentSocketIds.length; i++) { 
     if(socketId == currentSocketIds[i]) { 
      io.sockets.connected[socketId].emit('my message', data); 
      isSocketOfCurrentUser = true; 
      break; 
     } 
    } 
    if(!isSocketOfCurrentUser) { 
     io.sockets.connected[socketId].emit('new message', data); 
    } 
}