2017-02-28 81 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); 
    } 
}