一种基于SignalR的民用飞机安全运行实时监测方法及监测系统与流程

文档序号:11479771阅读:1050来源:国知局
一种基于SignalR的民用飞机安全运行实时监测方法及监测系统与流程

本发明属于实时通信和民航飞机安全运行监测技术领域,具体涉及一种基于signalr的民用飞机安全运行实时监测方法。



背景技术:

传统的民航飞机运行实时监测采用ajax长轮询(longpolling)技术,由客户端按照固定间隔不断向服务器请求数据来达到伪实时通信效果,无法做到服务器直接向客户端推送数据,消耗cpu和网络资源大。signalr是一种高效便捷的全双工(full-duplex)通信框架,能够建立基于websocket的异步、永久连接,适合航空安全运行实时监测。然而signalr进行高频实时通信时有以下缺点:

signalr使用集线器类(hub)api来处理服务器到客户端的交互。由于每一次连接都会新建一个hub实例,因此数据存储、转发、广播等更新机制的实现需要放在另一个单例化、全局性的上下文中,否则在高并发访问下内存中会有大量冗余hub实例存在,影响系统性能。

signalr的推送消息是基于连接(connection)的,signalr会为每个会话自动生成一个随机新建的connectionid,当客户端刷新之后connectionid也随之刷新。但是运行监控系统的消息推送是基于用户的(权限体系),也就是只有登录之后才注册到此hub,因此需要对signalr的连接方式进行扩展,使之可以进行基于用户的数据推送。

signalr为客户端-服务器模式,当同时维护的连接数较多时,服务器性能会显著下降,需要进行分布式运算和负载均衡,使得系统能够支持大量用户并发操作。



技术实现要素:

本发明为了解决现有技术中存在的问题,提供一种基于signalr的民用飞机安全运行实时监测系统及监测方法,通过使用signalr技术进行飞机运行的实时监控。

所述的监测系统包括ads-b地面站、signalr服务器和客户端三部分。其中ads-b地面站主要负责获取飞机实时飞行数据,并通过httppost方式单向发送到signalr服务器;signalr服务器与客户端直接通过websocket建立全双工通信连接,当飞机实时运行数据更新时直接推送至客户端,同时客户端也可以根据需要对signalr服务器主动发起数据请求(如用户登录、按照特定条件请求数据等);客户端负责以webgis技术将飞机实时信息呈现出来。

所述的监测方法包括如下步骤:

第一步,ads-b地面站获取飞机实时飞行数据;

第二步,实时数据通信;

第三步,webgisgis呈现。

本发明的优点在于:

(1)使用signalrsignalr框架进行实时通信,相比于民航传统的ajax长轮询(longpolling)技术,消耗的cpu和网络资源大幅度减小。

(2)通过对signalr进行全局单例化,大幅度减小服务器内存占用。

(3)通过对iuseridprovider进行扩展并注入会话,解除signalr连接对connectionid的依赖,使得连接可以直接关联用户信息。

(4)通过分布式运算和负载均衡优化服务性能,使得系统能够支持大量用户并发操作。

(5)通过webgis加载实时飞行数据进行直观的可视化显示。

附图说明

图1是本发明的基于signalr的民用飞机安全运行实时监测系统架构图;

图2是本发明的基于signalr的民用飞机安全运行实时监测方法流程图;

图3是signalr全局单例化实现示意图;

图4是redis负载均衡示意图。

具体实施方式

下面将结合附图和实施例对本发明作进一步的详细说明。

本发明提供一种基于signalr的民用飞机安全运行实时监测方法,所述的方法通过如下的基于signalr的民用飞机安全运行实时监测系统实现。如图1所示,所述的系统包括ads-b地面站、signalr服务器和客户端三部分,。其中ads-b地面站主要负责获取飞机实时飞行数据,并通过httppost方式单向发送到signalr服务器;signalr服务器与客户端直接通过websocket建立全双工通信连接,当飞机实时运行数据更新时直接推送至客户端,同时客户端也可以根据需要对signalr服务器主动发起数据请求(如用户登录、按照特定条件请求数据等);客户端负责以webgis技术将飞机实时信息呈现出来。

结合图2所示流程图,所述的基于signalr的民用飞机安全运行实时监测方法包括如下步骤:

第一步,ads-b地面站获取飞机实时飞行数据;

ads-b的信息处理与显示主要包括位置信息和其它附加信息的分析提取,然后通过httppost请求发送到signalr服务器。

第二步,实时数据通信;

(2.1)signalr全局、单例化实现。

如图3所示,首先创建servertickerhub类继承hub类(集线器),用以重写hub类的连接建立、连接断开等基本事件。然后创建serverticker类承担数据更新逻辑,同时采用单例模式创建serverticker实例确保内存中只有一个serverticker实例存在,再从每个servertickerhub类中添加对serverticker单一实例的引用,最后为serverticker类添加signalr全局集线器连接上下文对象的引用,使得serverticker能够对客户端1~n进行广播。

(2.2)扩展signalriuseridprovider并注入会话。

创建一个myuserfactory类,继承自iuseridprovider,实现iuseridprovider的抽象方法getuserid,并从浏览器cookies中获取用户id。在starup.cs文件中,将自定义的myuserfactory类注入到会话设置中,解除signalr连接对connectionid的依赖,使得每一个连接直接与当前登录的用户关联。

(2.3)基于redis的signalr分布式服务及负载均衡。

如图4所示,通过对redis建立缓冲集群,并对缓冲集群进行合理设计实现分布式服务负载均衡,具体包括:

(a)缓存集群基础配置:确保系统能够随机访问缓存集群中的任意正常redis节点,在某redis节点发生故障时,能够自动撤销该redis节点;redis节点恢复后,能够自动添加该redis节点。

(b)节点信息表维护:通过二维表记录集群中每个节点的运行参数、访问量,确保同一集群中权重之和等于100。当缓存节点变化,或者节点的访问权重发生变化,各应用服务器需要重启。

(c)定时器运行:定时器每段时间运行一次,运行时的工作主要是记录运行参数,包括集群中每个节点当前的有效标记、访问区间、累计访问次数等参数,同时对节点信息表进行主动维护;其次是对访问次数进行动态调整,例如当某一节点累计访问次数达到预设最大值时,所有节点访问次数都设为预设最小值。

(d)缓存数据持久化:配置redis缓存数据持久化参数,将缓存数据存入数据库。

第三步,webgis呈现。

客户端以openlayers3为gis框架进行飞机实时状态呈现,将飞机作为点状要素展在遥感影像底图上。当客户端接收到飞机实时飞行数据后,将新的实时信息和坐标赋予飞机要素,同时调用postcompose函数进行地图重绘并刷新飞机要素的位置和信息,实现流畅的飞行动画和实时信息查询。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1