我正在使用socket.io和node.js / mongoDB作为应用程序,它将在Parents
和Drivers
让我们说司机正沿着一条路走,每次更改位置时,他都会将他的位置发送到特定父母的名单。
我可以想到一种实现这种功能的方法
1-我创建了两个数组
var userSockets = {};
var driverSockets = {};
每当连接用户/驱动程序时,我都会
For Driver - driverSockets[accId] = socket
For User - userSockets[accId] = socket
现在,如果驾驶员必须发出位置变化,他将执行类似
的操作userSockets[userId].emit(abc)
我想知道这种方法是否更好?将用户保存为MongoDB中的onlineUsers会更好,但即便如此,如何访问其套接字以发送数据。
什么是最好的方法。
答案 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"}');
}
}
});
});