使用socket.io发送实时分析的最佳方法
我正在使用socket.io和node.js / mongoDB的应用程序将发送实时分析Parents
和Drivers
之间
比方说,司机正在沿着一条path前进,为了每个位置的变化,他会把他的位置发送到一个特定的父母名单。
我可以想到一种方法来实现这样的function
1-我创build了两个数组
var userSockets = {}; var driverSockets = {};
每当用户/驱动程序连接,我做
For Driver - driverSockets[accId] = socket For User - userSockets[accId] = socket
现在,如果驾驶员必须发生位置变化,他会做类似的事情
userSockets[userId].emit(abc)
我想知道这个方法是否更好? 将用户保存为MongoDB中的onlineUser会更好,但是即使如此,如何访问其套接字来发送数据。
什么是最好的方法。
您应该使用“房间”来存储在线用户,并在发生位置变化时发送到该房间(频道)。
//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'});
下面是使用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"}'); } } }); });
- NodeJS – 间歇性地出现“错误:此sockets已closures”
- AngularJs ng-include和socket.io
- NodeJS,SocketIO和Express逻辑上下文构build
- apr_socket_recv:通过对端重置的连接(104)nodejs Ubuntu 14.10 x64 8GB RAM 4核心(VPS)
- MongoLab上的Node.js和MongoDB:每个插入上的“套接字closures”
- Node.JSnetworking模块处理意外的连接丢失
- 处理Node.js套接字数据
- 带有SSL的node.js和socket.io
- Socket.io – variables不在socket.on外面更新