使用socket.io发送实时分析的最佳方法

时间:2016-06-05 16:03:46

标签: node.js mongodb sockets socket.io

我正在使用socket.io和node.js / mongoDB作为应用程序,它将在ParentsDrivers

之间发送实时分析

让我们说司机正沿着一条路走,每次更改位置时,他都会将他的位置发送到特定父母的名单。

我可以想到一种实现这种功能的方法

1-我创建了两个数组

var userSockets = {};
var driverSockets = {};

每当连接用户/驱动程序时,我都会

For Driver -    driverSockets[accId] = socket
For User   -    userSockets[accId] = socket

现在,如果驾驶员必须发出位置变化,他将执行类似

的操作
userSockets[userId].emit(abc)

我想知道这种方法是否更好?将用户保存为MongoDB中的onlineUsers会更好,但即便如此,如何访问其套接字以发送数据。

什么是最好的方法。

2 个答案:

答案 0 :(得分:1)

您应该使用“房间”存储在线用户,并在位置更改时发送到此房间(频道)。

//join a room(channel)
socket.join('online'); 
//sending to sender client, only if they are in 'online' room(channel) 
socket.to('online').emit('location', {user_type:'driver'});

答案 1 :(得分:0)

  

以下是使用 user_type 关键字将不同数组中的驱动程序和父项分开的示例代码,并实时向所有父项发送驱动程序位置。此外,我们可以添加用户手机号码,以便将特定的司机位置发送给特定的父母等。

var parents = [];
var drivers = [];
var users = [];
io.on('connection', function(socket){
  users.push(socket);
  socket.on('disconnect', function(msg){
     var i = users.indexOf(socket);
     users.splice(i, 1);
     var j = parents.indexOf(socket);
     if(j !== -1){
       parents.splice(j, 1);
     }
     var k = drivers.indexOf(socket);
     if(k !== -1){
       drivers.splice(k, 1);
     }
  });
  socket.on('register', function(msg){
     console.log(msg);//send json- {"user_type":"driver"}
     var data = JSON.parse(msg);
     var i = users.indexOf(socket);
     if(data.user_type === 'driver'){
       drivers.push(users[i]);
     }else{
       parents.push(users[i]);
     }
     users[i].emit('register', '{"status":"registered"}');
   });
   socket.on('location', function(msg){
     console.log(msg);//send json- {"user_type":"driver","location":"lat,long"}
     var data = JSON.parse(msg);
     if(data.user_type === 'driver'){
       for(var x=0;x<parents.length;x++){
          parents[x].emit('location', '{"user_type":"driver", "location":"lat,long"}');
       }
     }
   });
});