当前位置: 首页 > 知识库问答 >
问题:

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

太叔豪
2023-03-14

我正在使用socket.io和node.js/mongoDB的应用程序,它将在父母驱动程序之间发送实时分析

假设司机沿着一条路径移动,每次位置改变,他都会将自己的位置发送给特定家长的列表。

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

1-我创建了两个数组

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

无论何时连接用户/驱动程序,我都会这样做

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

现在,如果驾驶员必须发出位置变化,他将执行以下操作:

userSockets[userId].emit(abc)

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

最好的方法是什么。

共有2个答案

端木明贤
2023-03-14

下面是一个示例代码,它使用用户_类型的关键字在不同数组中分离驱动程序和父级,并将驱动程序位置实时发送给所有父级。此外,我们还可以添加用户手机号码,将特定的司机位置发送给特定的家长等。

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"}');
       }
     }
   });
});
万俟高峻
2023-03-14

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

//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'});
 类似资料:
  • 问题内容: 我打算通过此库在android中实现Socket.io,用于基于聊天的应用程序。据我了解,该图书馆似乎还不错。我想知道如何始终保持整个应用程序中的 单个 套接字连接吗?在这里,我列出了实现的方法,其中我需要最好和稳定的方法。 三种方式 MainApplication 类扩展 应用程序 这样,我们就可以在 主线程 (或应用程序的生命周期)中维护套接字连接,并且只要活动需要套接字实例,我们

  • 我在c中有一个存储字节的结构,如下所示: 我需要通过节俭将这些数据发送到用C编写的远程服务。我发现了三种方法如何将此结构映射到节俭idl: > 使用二进制键入: 以类型存储数据: 最好的办法是什么?

  • 问题内容: 我想使用socket.io将数据从服务器推送到浏览器,但是该项目是java tomcat之一,并且 Github中 有许多实现的服务器实现。他们中的大多数人都说 过时了, 或者有更好的版本可用。谁能建议我一个好的实现。 而且,我看到了许多有关使用广播的演示和示例代码。我的要求是将不同的消息推送到不同的客户端。有人可以指出一些有关此类内容的优秀演示或教程吗? 谢谢 问题答案: 作为作者,

  • 问题内容: 我想为php网站使用bbcode过滤器。(我正在使用cakephp,它将是一个bbcode助手)我有一些要求。 Bbcode可以嵌套。 所以类似的东西是有效的。 Bbcode可以具有0个或多个参数。 范例: Bbcode可能具有多种行为。 可以说,将转换为 或视频bbcode可以在youtube,dailymotion …之间进行选择。 我认为它可以满足我的大部分需求。我用正则表达式做

  • 我想从spring控制器返回一个字符串(json字符串)作为它接收到的AJAX调用的响应,响应可能会根据我是否提交了@Valid表单而有所不同。这就是我处理它的方式,我想知道这是否被认为是最佳实践?请注意,我使用的是@RestController,所以@ResonseBody应用所有方法。

  • 问题内容: 众所周知,Internet Explorer会积极地缓存ajax调用,而所有其他浏览器每次都会重新获取数据。这通常是不好的:我从未遇到过我希望Ajax不联系服务器的情况。Firefox,Safari和其他浏览器都知道这一点,并且不会缓存ajax调用。 为了防止IE缓存,您必须执行以下操作之一: 向查询字符串中添加一个清除缓存令牌(如) 发送专门禁止IE缓存请求的HTTP响应标头 使用a