Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在web浏览器中显示实时数据?_Javascript_Asp.net_Ajax_Google Maps Api 3_Real Time - Fatal编程技术网

Javascript 如何在web浏览器中显示实时数据?

Javascript 如何在web浏览器中显示实时数据?,javascript,asp.net,ajax,google-maps-api-3,real-time,Javascript,Asp.net,Ajax,Google Maps Api 3,Real Time,我的任务是设计一个ASP.net web应用程序,该应用程序执行以下操作: (1) 全市员工将使用相关的移动应用程序。当他们使用移动应用程序时,他们的GPS位置会被发送到服务器 (2) 该网络应用程序必须使用谷歌地图绘制城市地图,并显示显示每个员工位置的标记 有人建议web应用程序每三分钟自动刷新一次数据 然而,我不停地想,为什么我要坚持使用投票解决方案;这在21世纪似乎已经过时了 至于浏览器和web服务器之间的通信,我知道两种解决方案 一个是一个长期运行的HTTP请求,在用户访问应用程序期间保

我的任务是设计一个ASP.net web应用程序,该应用程序执行以下操作:

(1) 全市员工将使用相关的移动应用程序。当他们使用移动应用程序时,他们的GPS位置会被发送到服务器

(2) 该网络应用程序必须使用谷歌地图绘制城市地图,并显示显示每个员工位置的标记

有人建议web应用程序每三分钟自动刷新一次数据

然而,我不停地想,为什么我要坚持使用投票解决方案;这在21世纪似乎已经过时了

至于浏览器和web服务器之间的通信,我知道两种解决方案

一个是一个长期运行的HTTP请求,在用户访问应用程序期间保持打开状态。(此处演示:)

另一个是HTML5WebSockets

我认为上述任何一种解决方案都应该足以以近乎实时的方式将数据从服务器传输到浏览器


也就是说,web应用程序的数据模型是MS SQL。我不知道有什么方法可以让web服务器知道数据模型何时更新,而不让web服务器轮询SQL server

我认为一个可能的解决方案可能是在web应用加载时从SQL获取关联位置,然后在关联更新到来时,将它们发送到所有连接的web浏览器,同时在SQL中更新它们。这将需要处理来自关联的传入数据的线程自动与正在向浏览器发送位置数据的其他线程通信,我不知道如何做到这一点。即使这样,我也不得不从一个线程到另一个线程进行轮询

不必求助于轮询解决方案,实现客户请求的好方法是什么?如果需要轮询解决方案,我如何将其缺点最小化


我知道有解决办法。否则,当一条新消息到达时,GMail怎么能告诉你呢


编辑:一种特殊情况:假设Adam是该领域的一名合伙人,而Omar是一名操作员,使用此应用程序监视Adam的行踪

Omar登录;他的浏览器向服务器发送一个请求,服务器返回一个响应,告诉Adam在哪里。然后,Omar的浏览器启动一个长时间运行的HTTP请求,以接收有关Adam去哪里的更新

几分钟后,亚当跳上一辆公司卡车,沿路行驶。当卡车开始移动时,Adam的移动应用程序向web服务器发送一个更新,表明他已经移动了


鉴于上述情况,web服务器如何与Adam移动的Omar web浏览器通信(没有Omar浏览器或web服务器参与任何类型的轮询)?

参考编辑中的具体情况:

Realtime(我工作的公司)有一个允许Omar使用JavaScriptSDK订阅Adam频道(websockets,在引擎盖下有后备功能)

当Adam更改位置时,他的应用程序会向Web服务器发送更新。Web服务器将数据保存到数据库中,并在成功后使用.NET SDK(假设您使用的是.NET)或REST API(简单的POST)将新位置发布到Adam的通道中

带有Adam位置的已发布消息将由实时服务器发送到Omar的浏览器订阅(实际上是同一频道的任何其他订阅),该订阅将解析消息并在Google地图中呈现适当的数据

MSSQL更改跟踪 SQL Server没有这个功能。如果要按geo-lat/long进行搜索,可能必须将位置数据保存在MSSQL中

如果你把它保存在MSSQL中,那么你要寻找的特性就是。更改跟踪将更改行的主键放入新表中。您仍然需要轮询“更改表”以获得更改。使用MSSQL无法将它们推送到web服务器

更改跟踪是CDC的现代版本,比SQL触发器更有效。您没有提到您正在运行的SQL的哪个版本,“更改跟踪”自2008年以来一直在SQL Server中,但在早期版本中有很多问题。我读过的专家直到SQL 2017+或Azure SQL才推荐它

投票 一些高端数据库具有“更改提要”功能(CosmosDB),但如果轮询对我来说足够好的话,它对我来说就足够好了。(Grafana是Kubernetes的默认仪表板。)

但是不能运行“查询每个用户的数据库”,这会很快杀死数据库。我会为每台web服务器创建一个后台线程来轮询DB,然后使用服务器发送事件(SSE)、socket.io或signal向用户发送新数据。

PostgreSQL有pub/sub PostgreSQL已经发布了,但是如果您要离开MSSQL,您应该完全离开SQL。见和

具有实时更新或更改提要的DBs 如果您切换数据存储,我建议您使用GCP Firebase实时数据库(<500个用户)或。CosmosDB有更改源,如果您已经在使用Azure功能,这可能会很棒,但我认为Firebase Realtime和Redis streams在web服务器上更易于使用。(似乎CosmosDB变更提要是为数据复制或数据仓库而设计的,而不是为websocket推送而设计的。)

有关每查询轮询(Meteor样式)与日志跟踪的更多背景信息,以及为什么这两种方法都不能大规模工作,请参阅

最后一英里(推送服务)
您可以直接从浏览器或web服务器使用Firebase。除了Firebase之外,还有许多“推送”服务将为您实现最后一英里。这篇链接文章是员工写的,但我从未尝试过。对于MS/.NET,SignalR Core现在是Azure上的一项服务。

我相信有一些方法可以在MSSQL中创建河流,然后使用socket.io之类的东西向客户端发送更新