一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种实时数据通信方法与流程

2022-11-30 16:34:12 来源:中国专利 TAG:


1.本发明涉及一种实时数据通讯方法,属于通讯技术领域。


背景技术:

2.目前,随着数据业务的不断发展,如大屏实时数据展示服务、数据服务异常监控服务等应用场景,对于数据的实时性要求较高,以便实时更新数据使得消费者了解最新的数据状态或服务状态等信息。常规的实时更新数据方式为:通过前端轮询方式进行;但是以定时器固定时间方式发起轮询方式已经无法满足大数据情况下用户对于数据高实时性的性能要求;而且轮询方式也无法及时发现断网离线或移除设备的终端设备,从而导致网络带宽被占用,影响其他终端设备的数据更新网速,导致用户体验较差。为此,亟需一种能够解决上述问题的实时数据通信方法。


技术实现要素:

3.本发明的目的在于克服上述不足,提供一种实时数据更新更为高效且占用资源少的通信方法。
4.本发明的目的是这样实现的:一种实时数据通信方法, 所述方法涉及:作为数据终端的数据生产者,其作用在于产生数据;作为服务器的数据处理者,其作用在于接收数据生产者的数据并推送至数据消费者;作为客户端的数据消费者,其作用在于接收数据处理者推送的数据;实时数据更新前,数据消费者主动向数据处理者建立连接并注册所需数据信息,数据消费者注册成功之后,数据处理者将接收到的数据生产者的实时数据信息推送至数据消费者。
5.优选的,数据消费者与数据处理者之间建立连接并注册的过程为:s1、数据消费者通过网络与数据处理者的websocket服务建立连接;s2、数据消费者向数据处理者的websocket服务发送注册消息进行注册;s3、数据消费者向数据处理者的websocke服务发送心跳信息以便数据处理者的实时知晓数据消费者是否在线。
6.优选的,数据处理者向数据消费者推送实时数据的更新过程为:数据生产者通过rocketmq异步消息发送方式将实时数据推送到数据处理者的websocket服务保存;或者数据生产者通过restful调用接口的方式将数据推送到rest服务,再由rest服务将数据通过rocketmq异步消息发送方式推送到数据处理者的websocket服务中保存。
7.优选的,步骤s2中,若步骤s1中连接建立后的预定时间内数据消费者未向数据处理者发送注册信息,数据处理者的websocket服务自动关闭与对应的数据消费者的连接;步骤s3中,若步骤s2中注册成功后的预定时间内未向数据处理者发送心跳信息,数据处理者
的websocket服务关闭与对应的数据消费者之间的连接。
8.优选的,在步骤s2中:数据消费者注册时通过数据包内的servicename、group与listens字段进行告知数据处理者的websocket服务所需数据类型,servicename标识监听的服务类型名称、group标识监听的场景类型、listens标识复杂情况下监听的场景配置。
9.优选的,数据消费者在未完成步骤s2发送注册消息的前提下,进行步骤s3心跳信息的发送,数据处理者强制关闭与该数据消费者之间的连接。
10.与现有技术相比,本发明的有益效果是:本发明与常规更新方式相比无需前端自动轮询,终端服务仅需连接并注册到websocket服务中,即可实时接收变更的数据信息。同时,通过不断的优化终端对于数据监听的规则,通过servicename与group和listens三个规则变量满足绝大部分实时数据场景;并且在注册时在注册信息中写入所需获取数据信息的类型,从而可以智能的将不同的数据推送到不同的前端服务;同时,通过结合redis等缓存服务的方式及时断开没有数据连接的客户端以及恶意连接的客户端,提高服务的可用信息;最后websocket服务可集群部署,通过集群部署的方式将服务的可用性提高到99.9%,极大的提高了相应速度。
附图说明
11.图1为本发明一种实时数据通信方法的拓扑示意图。
12.图2为本发明中数据生产者和数据处理者之间创建连接的示意图。
13.图3为本发明中数据生产者向数据处理者发送注册信息的示意图。
14.图4为本发明中数据生产者向数据处理者发送心跳数据的示意图。
具体实施方式
15.参见图1~4,本发明涉及的一种实时数据通信方法,通过netty服务做为底层支撑,结合epool和reactors 线程模型,实现websocket实时数据通信服务,通过结合redis的缓存存储以及redis的过期key监听功能实现异常客户端的及时关闭以便回收资源,另外通过rocketmq的异步消息队列,并以broadcasting模式实现集群下,多服务可同时读取的方式,保证数据能推送到所有监听了该类型数据的客户端。
16.具体的讲:本发明实时数据通信方法为基于netty的websocket实时数据通信服务,并结合redis和rocketmq等中间件,提高websocket的服务的可用性。
17.本发明实时数据通信方法的硬件基础提供三种角色:数据生产者、数据处理者和数据消费者,数据生产者通过网络与数据处理者通讯相连,数据处理者通过网络与数据消费者通讯相连。
18.一、数据生产者,即数据创建者,提供数据的角色,该角色可以为远程服务器上运行的某一服务,或者是其他智能终端设备(如pad设备终端或者andriod终端等)。数据生产者的数据来源都是基于本身的业务服务数据,或者持有智能终端设备的人员手动操作获取的实时数据。
19.二、数据处理者,即接收数据生产者的数据后运行于处理系统(如远程服务器)上的websocket服务,用于对数据进行处理和中转。同时,通过websocket服务的集群部署,结
合netty的底层epool和reactors 多线程模型,提高服务的高并发。
20.三、数据消费者,即数据接收终端,如andriod设备终端、pad终端或者浏览器大屏终端等。
21.实时数据更新前,数据消费者需要通过下述步骤实现与数据处理者的连接:s1、数据消费者通过网络与数据处理者的websocket服务建立连接;参见图2。
22.s2、数据消费者向数据处理者的websocket服务发送注册消息,注册通过后才能进行实时数据的更新接收;且步骤s1中连接建立后若5秒内数据消费者未向数据处理者发送注册信息,数据处理者的websocket服务自动关闭对应的数据消费者的连接。本步骤中建立连接之后5秒内要求作为客户端的数据消费者发送注册信息,是为了防止恶意数据消费者侵占作为服务端的数据处理者的资源,导致服务不可用;参见图3。
23.s3、数据消费者向数据处理者的websocke服务发送心跳信息以便数据处理者的实时知晓数据消费者是否在线;且步骤s2中发送注册信息后,若数据消费者15分钟内未向数据处理者发送心跳信息,数据处理者的websocket服务关闭对应的数据消费者的连接。本步骤中通过注册后要求作为客户端的数据消费者发送心跳的方式,是为了防止数据消费者已经移除或死机等情况,导致单通道连接一直占用资源的情况;参见图4。
24.其中,步骤s2和步骤s3中通过这限时方式防止数据处理者的websocket服务端资源因为外部因素导致出现的可能异常问题,从而提高服务的可用性、可靠性。
25.其中,步骤s2中:数据消费者注册时需要指定关注的数据类型,通过servicename、group与listens三个字段进行告知数据处理者的websocket服务所需数据类型。其中: servicename标识监听的服务类型名称(即指定监听的数据来源服务)、group标识监听的场景类型(即指明监听服务下何种场景(数据组)数据)、listens标识复杂情况下监听的场景配置(即在作为客户端的数据消费者需要同时监听多个服务时需要配置的监听规则)。
26.具体的讲:数据消费者再注册时发送的注册信息中的servicename如果指定为xhl,则表示客户端仅监听数据来源于xhl服务的数据,如果servicename指定为*号,则表示客户端监听所有的服务数据;但是具体能够监听哪种场景类型,还需要通过listens进行配置,或者如果需要监听所有服务的所有数据,则将group指定为* 即可。如果并不是监听所有服务的所有数据,可在servicename指定为* 后,再通过listens配置具体监听何种服务下的何种场景。如servicename=“*”且指定listens=[{“servicename”:"xhl","group":"*"},{“servicename”:"kdg","group":"delivery"}] ,则表示客户端仅监听servicename为xhl和kdg两个服务,且对于xhl服务监听所有的数据,对于kdg则仅监听场景为delivery的数据。
[0027]
且步骤s2中作为客户端的数据消费者注册成功之后,作为服务端的数据处理者会向客户端发送注册成功的确认消息,消息格式为json,消息内容为:{"code": "0","msg": "register success!"},其中code码为0,表示响应正常,如果code码为非0 则表示注册异常,msg字段则表示具体的消息,用于描述具体的失败情况或者成功信息。
[0028]
数据消费者注册成功之后,数据处理者通过websocket服务将接收的数据生产者推送过来的实时数据、转成json格式后推送至数据消费者,其中:json格式的内容则只需要
生产者与消费者自定义即可。
[0029]
数据处理者的websocket服务对接收到的实时数据通过下面方式处理:一、在com.furen.kiwifruit.enums.serviceenum中添加新的服务类型,并且通过doassemblemsg方法当数据消费者请求数据时,数据处理者直接将获取的实时数据发送至数据消费者,不做任何封装处理;其中,serviceenum中的doassemblemsg主要是通过解析请求数据中的数据组,区分是何种数据通,并通过调用对应数据组中的具体解析方式解析数据。
[0030]
二、在com.furen.kiwifruit.enums.groupenum中添加新的数据组,并通过processmsg方法编写具体的数据处理流程,如果不需要进行数据处理,则会调用通用的数据处理流程,直接按照原数据格式推送到客户端。
[0031]
并且,由于数据处理者的websocket服务是提供给数据生产者和数据消费者进行数据转发的,因此一般情况下,不需要对数据生产者提交的数据进行处理,但在极个别情况下为了保证数据安全,需要对数据进行编解码等操作。具体是否需要进行处理主要由业务服务决定,如果服务来自第三方,则需要进行数据的编解码,如果是自己内部服务,可以直接通过原数据进行转发,不需要对数据进行额外的逻辑处理。
[0032]
当第三方服务对接时,需要由第三方通过申请对应的加密信息,并使用aes对称加密数据,再由本服务通过公钥进行解密,加密后的信息是一个非json格式的字符串,而内部服务则不需要进行该操作,也就是说内部服务产生的数据是json格式的。由于需要进行对接的第三方比较多,所以在第三方发送请求数据的时候,需要在请求头中加入第三方的区分信息例如在header头部追加一个from字段,表示数据来源的第三方是谁,在本服务接收并解析后,通过from字段区分之后找到对应的公钥信息,再拿对应的公钥将第三方的数据进行aes解密。
[0033]
同时,上述步骤s2和步骤s3中,注册消息与心跳消息中的type字段用于区分注册消息与心跳消息这两种消息类型(这样做是由于前端暂时没有相关的ping/pong api)。
[0034]
数据消费者在未完成步骤s2发送注册消息的前提下,进行步骤s3心跳信息的发送,数据处理者强制关闭与数据消费者之间的channel通道。
[0035]
进一步的,实时数据的更新过程为:数据生产者通过rocketmq异步消息发送方式将实时数据推送到数据处理者的websocket服务保存;或者数据生产者通过restful调用接口的方式将数据推送到rest服务,再由rest服务将数据通过rocketmq异步消息发送方式推送到数据处理者的websocket服务中保存。
[0036]
下面结合物流大屏实时显示物流流转信息的应用场景进行说明:物流实时大屏,需要在大屏上实时显示物流的流转信息,或者车辆的实时路径等信息,由于物流和车辆数据极多,并且状态各有不同,在要求实时性展示时,若由前端(即数据消费者)进行轮询操作,即无谓的耗费大量资源、占用大量的带宽,且状态实时变化与轮询时间往往具有一定时间差,无法做到真正意义上的实时数据展示。因此需要采用本发明的实时数据通信方法。
[0037]
此时,后端(即数据生产者)在物流状态和车辆状态发生变更的时候,通知到服务端(即数据处理者)的websocket服务集群,再由websocket服务将对应的数据转发到前端的
大屏终端进行更新,从而即实现局部快速刷新,又避免由于前端进行轮询刷新导致后台服务的大量性能损耗。而且通过该方式,可以实现毫秒级的实时数据变更展示,同时客户端也不需要损耗大量的算力去解析和重绘大屏内容。
[0038]
另外:需要注意的是,上述具体实施方式仅为本专利的一个优化方案,本领域的技术人员根据上述构思所做的任何改动或改进,均在本专利的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献