2017-10-17 63 views
0
dbOperations.saveRequest(db, requestId, requestTime, location, eventData.citizenId, 'waiting', function(results) { 

     //2. AFTER saving, fetch nearby cops from citizen’s location 
     dbOperations.fetchNearestCops(db, location.coordinates, function(results) { 
      eventData.requestId = requestId; 
      //3. After fetching nearest cops, fire a 'request-for-help' event to each of them 
      for (var i = 0; i < results.length; i++) { 
       io.sockets.in(results[i].userId).emit('request-for-help', eventData); 
      } 
     }); 
    }); 
}); 

我想发送事件给一个特定的警察,但不是所有......... ,我不完全得到如何io.socket.in工作可以任何人建议我aproper参考继续plzzzzzzz ...........如何在命名空间socket.io中将客户端与其他客户端连接起来?

回答

0

基本上我们在我们的项目中做的是我们已经创建了一个层来管理userId和socketId之间的一对一映射。因此,无论何时连接用户套接字,我们首先注册该用户,因此该层将userId的映射添加到socketId,并且当用户断开连接时,我们根据socketId移除映射。

因此,如果你想发送给用户,传递这个userId到这个图层,如果这个图层有映射到socketId将发送数据。

var userMap ={}; 
var socketMap ={}; 

io.sockets.on('connection', function(socket) { 

    socket.on('register', function(userId, cb) { 
     /*Our custom event, which on basis of userId add mapping between user and socketid*/ 
     userMap[userId] = socket.id;   //save user 
     socketMap[socket.id] = userId;  //save socket 
    }); 

    socket.on('disconnect', function(userId, cb) { 
    /*When socket disconnect, remove mapping*/ 
     delete userMap[socketMap[socket.id]];   //remove user 
     delete socketMap[socket.id];     //remove socket 
    }); 

}); 

/*Function used to send message*/ 
function sendMessage(userId){ 
    if(userMap[userId]){ 
      io.to(userMap[userId]).emit('message'); 
    }  
} 
+0

比你洙多兄弟。 –