基于MQTT协议的实时高并发即时通讯方法、设备及介质与流程

文档序号:37682147发布日期:2024-04-18 20:54阅读:15来源:国知局
基于MQTT协议的实时高并发即时通讯方法、设备及介质与流程

本发明涉及数据传输方法,具体地说是一种基于mqtt协议的实时高并发即时通讯方法、设备及介质。


背景技术:

1、信创、数智化及网络安全等逐渐上升为时代主题,协同工作平台受到国家和企业的关注。云原生、5g等创新技术的全方位发展与成熟,充分奠定了数字化办公技术与基础设施的基础,成功助推数字化业务协同的创新应用。

2、协同工作平台中,即时通讯功能实现消息推送的传统方式是轮询,即客户端软件通过定时机制从服务端端获取消息,这种方式并非真正的消息推送,而且比较耗费流量。传统的即时通讯协议,大都使用tcp、http等协议,这些协议设计的主要用途是互联网信息浏览,而不是用于消息传递,存在消息传递不及时、网络流量耗费大等问题,严重制约了协同工作平台即时通讯功能的完善和用户体验。

3、随着技术的发展,mqtt(message queuing telemetry transport,消息队列遥测传输),可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务,具有轻量、简单、开放等特点,适用范围非常广泛。

4、根据用户市场调研结果显示,体验需求、安全需求和低成本需求,已成为即时通讯产品的三大“痛点”需求。

5、(1)体验需求是对即时通讯技术的本质需求,需要提供随时随地地沟通交流,以及无卡顿、低延时的服务。如何保证消息100%触达、降低消息延迟,一直是即时通讯技术优化的重点。

6、(2)安全需求是对即时通讯技术的基本要求,首先要保证网络运营环境的安全,需要提供私有化部署的能力,保证数据能够存储在本地服务器。其次信息在传输过程中泄密的事件时有发生,因此需要找到行之有效的解决方案,确保信息在流转、使用过程中的绝对安全。

7、(3)低成本需求是即时通讯的发展需求,相比于大型民营企业,中小企业更加注重成本,更倾向于选择如企业微信、钉钉等产品来满足企业的基本需求。但是随着国家信息安全法律法规不断完善,执行力度不断加大,越来越多的中小企业开始寻求新的低成本的、能够私有化部署的即时沟通软件,来构建沟通和协同工作能力。

8、目前,业界常用的即时通讯技术有:(1)基于http的轮询;(2)基于websocket长连接;(3)基于tcp或udp的自定义协议。此外早期还有基于comet技术的长连接,基于xmpp的开源客户端应用等。

9、各种即时通讯技术的对比:

10、

11、通过以上比较,http、xmpp、基于tcp/udp自定义协议的技术已无法满足新一代即时通讯技术的要求。对于mqtt和websocket技术,通过进一步比较,mqtt和websocket都是应用层协议,底层都使用tcp协议确保可靠传输数据,都规定了自己的报文(消息)结构,都支持双向通信,都使用二进制编码(有别于http这一类基于文本编码的协议)。

12、故如何满足企业级即时通讯需求中对信息安全传递、高效、多终端消息同步的要求,保证具备低延时、高并发、高送达、数据隐私保护特性,为用户提供良好的使用体验是目前亟待解决的技术问题。


技术实现思路

1、本发明的技术任务是提供一种基于mqtt协议的实时高并发即时通讯方法、设备及介质,来解决如何满足企业级即时通讯需求中对信息安全传递、高效、多终端消息同步的要求,保证具备低延时、高并发、高送达、数据隐私保护特性,为用户提供良好的使用体验的问题。

2、本发明的技术任务是按以下方式实现的,一种基于mqtt协议的实时高并发即时通讯方法,该方法是客户端通过网络接口将需要发送的消息提交给kinkora服务,在kinkora服务中的消息存入数据库,存入数据库后,将kinkora服务中的消息写入到kafka中,thorplus服务(消息投递服务)从kafka指定的消息传输topic中消费消息,根据需要消息上标识的组织id和需要投递的人投递到指定的mqtt topic上,目标用户若在线会订阅在对应的mqtt topic上,消息通过订阅的topic链路实现消息的在线推送;若客户端离线,客户端在登录后通过网络接口拉取消息。

3、作为优选,kinkora服务包括chat服务、ktask服务和kschedule服务;

4、chat服务负责与设备上业务相关的操作;业务相关的操作包括聊天的生命周期管理及发送消息的接口服务;

5、ktask服务作为kafka消费者承接chat服务分发的长耗时任务,达到任务异步化处理的目的;

6、kschedule服务是一个定时任务服务。

7、更优地,客户端产生的消息在chat服务中完成业务处理,通过kafka交由thorplus服务进行推送处理,具体如下:

8、若设备在线,使用mqtt服务进行在线推送;

9、若设备离线,使用离线推送服务进行推送。

10、更优地,kafka的配置要求具体如下:

11、①在kafka部署配置方面,采用集群方式,提高了消息的吞吐能力;

12、②在kafka生产消息方面,采用多个分区(partition),提高了消息的吞吐量、消息处理的横向扩展能力、容错率等优点;

13、③在kafka消费消息方面,thorplus服务采用goroutine进行消费,提高了消费消息的效率;其中,goroutine是go语言中的轻量级线程实现,由go运行时(runtime)管理;go程序会智能地将goroutine中的任务合理地分配给每个cpu;

14、④在具体消息的投递业务上,每个客户登录客户端都会订阅在一个“orgid_userid”(由当前组织id_当前用id)拼接而成的mqtt topic(是一个特定类型的消息流的集合)上,实现长链接的效果;当有一条消息在被thorplus服务投递到mqtt后,根据消息的目的orgid和userid进行投递到对应的topic的效果,实现消息的高效推送;

15、⑤在送达率方面,依托于mqtt的提供的消息传输质量指标qos为1的情况,即至少一次(qos1)消息推送策略(消息至少被投递一次),也就是说消息一直没有被回执确认会一直由mqtt推送到客户端上,确保消息的确认回执机制,有可能会重复,充分地提高了消息的送达率;其中,使用的稳定成熟大规模分布式mqtt服务器emqx;

16、⑥在去除重复消息方面,在消息发出时会给予消息全生命周期的唯一标识,即从消息产生之时就会被标记一个uniq_id,客户端在接收到消息后首先判断对应消息是否已经接收过,若已经处理过就不再执行后续操作,若未处理,则进行后续操作;

17、更优地,kinkora服务和thorplus服务是通过kafka消息队列进行业务上的解藕,即kinkora服务产生消息投递到对应的topic(订阅主题),thorplus服务从对应的topic上拉取消息进行消费,各司其职;并且kinkora服务和thorplus服务各自进行水平扩展,互不打扰,提高系统处理消息的能力;此处也是对高可用、高并发强有力的支持。

18、更优地,客户端在登录后通过网络接口拉取消息是采用多终端数据加密机数据同步技术,具体如下:

19、支持加密算法有aes、sm4,具体为:在进行消息推送前,所有的消息已经序列化为字节数组的形式,然后对字节数组形式的进行上述支持加算法的加密;每条消息上都有记录加密算法的标志位expand_type,操作方式为将expand_type转化为二进制,设左起第一位是aes加密标识位,1为加密,0为未加密,则左起第二位设置为sm4加密方式,同样的1为sm4加密生效,0为未进行sm4加密;两种加密方式只能同时存在一种;客户端在接收到消息后,只需要对expand_type进行位运算,判断是左起第一位为1还是左起第二位为1即可判断是何种加密方式,按照之前约定的参数进行解密即可;一个用户的多个设备是订阅在同一个topic上的,及实现了消息的同步功能,为用户多个设备在线的同步状态;若用户的另外一个设备登录后,通过网络接口拉取在对应设备未登录期间错过的消息,以达到数据同步的效果;具体拉取到什么时间节点聊天记录,逻辑为:从本地判断之前最后一条消息的时间,若设备超过五天未登录,则只从后往前拉取最近五天的消息;若设备未登录时间未超过五天,则从前往后拉取消息到当前时间点,完成数据在不同端之间的同步功能。

20、更优地,当使用tcp/ip时,网络连接已经受到保护,消息能够到达接收端,但是在无线网络中,中断和干扰很频繁,必须避免信息丢失和服务质量降低;

21、至少一次(qos1)消息推送策略基于发布/订阅模式,具体如下:

22、发送端在消息发送完成后,检查接收端是否已经成功接收到消息;

23、发送端将消息发送给接收端后,等待接收端的确认;

24、接收端成功接收消息后,发送一条确认报文puback给发送端;

25、若发送端收到puback确认报文,发送端确认消息已经成功接收;

26、若设定时间段内发送端未收到puback确认报文,发送端会再次发送消息,然后再次等待接收端的puback确认报文;

27、发送端在未收到接收端的puback确认报文前,会重复发送同一条消息;

28、当发送端重复发送一条消息时,将publish报文中的dupflag设置为true,告知接收端对应消息为重复发送的消息;

29、通过“至少一次”消息推送策略,提供多种消息发布服务质量,确保消息可靠传递,实现了与应用的解耦,减轻了大规模消息推送带来的巨大计算压力。

30、更优地,重构消息报文采用“固定头部+可变头部+消息体”的结构;

31、其中,固定头(fixed header)存在于所有mqtt数据包中,表示数据包类型及数据包的分组类标识;

32、可变头(variable header)存在于部分mqtt数据包中,数据包类型决定了可变头是否存在及其具体内容;

33、消息体(payload)存在于部分mqtt数据包中,表示客户端收到的具体内容。

34、一种电子设备,包括:存储器和至少一个处理器;

35、其中,所述存储器上存储有计算机程序;

36、所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的基于mqtt协议的实时高并发即时通讯方法。

37、一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如上述的基于mqtt协议的实时高并发即时通讯方法。

38、本发明的基于mqtt协议的实时高并发即时通讯方法、设备及介质具有以下优点:

39、(一)本发明为保证即时通讯运行的稳定性、可靠性及消息传递的安全性和完整性,基于mqtt协议自研分布式消息引擎技术,提供异步消息推送能力,赋予即时通讯低延时、高并发、高送达的特性,保证了系统运行的稳定性与高可用性;

40、(二)本发明基于mqtt协议及kafka(是一种分布式数据存储,经过优化以实时提取和处理流数据的分布式流处理平台)技术创新研发分布式长连接技术,实现多终端数据加密、数据同步确认与回执,面向分布式架构下的即时通讯提供稳定、可靠的长连接传输机制与通道,保证了信息传输的安全性与完整性;分布式长连接技术及分布式消息引擎满足互联网应用所需的海量消息堆积、高吞吐、可靠重试等要求,并实现消息计算与存储分离;同时通过分布式技术,拆分软件服务模块,提高系统模块重复使用程度,不仅使开发和发布速度可以并行而变得更快,还提高了系统扩展性,每个子系统可以单独拓展,对于瓶颈子服务可以更快更合理的优化;

41、(三)本发明在用户通过网络接口将要发送的消息交由发送消息服务(下称kinkora)处理完毕之后,就会将消息投递给kafka处理,这里的处理方式是异步的,也就是无需等待后续所有操作返回结果,提高了发送消息的效率;具有将消息的发送与推送业务进行解藕,使服务呈现模块化的开发模式,提高了系统需求变更的灵活性等积极作用;

42、(四)本发明为了减少从发送消息到接收到消息的时间所耗费的时间,除必要的逻辑之外,简化代码逻辑;使用异步的操作方法对非必要业务逻辑进行优化以及将消息投递出去;

43、(五)本发明有效的解决了企业级即时通讯需求中对信息安全传递、高效、多终端消息同步的要求,既保证具备低延时、高并发、高送达、数据隐私保护特性,为用户提供良好的使用体验;

44、(六)本发明在性能效率方面测试了“用户在线保活并发”、“大群聊不同用户人数消息并发及消息监听”、“多群聊消息并发及消息监听”共3个场景用户在线保活并发场景:在服务部署于单物理机单节点环境下,根据调用云上协同在线保活接口,通过不同程度的并发调用:用户并发次数达到6000时,平均响应时间小于6s,吞叶量最高可达1000.0/sec,cpu及内存均未超过70%,并且无异常调用问题,符合预期;大群聊不同用户人数消息并发及消息监听场景:在服务部署于单物理机单节点环境下,云上协同基于mqtt协议可支持两千人群聊,在云上协同两千人群中,当1000用户并发发送消息,另外1000人在线实时消息监听时,消息发送无异常,消息监听无异常,并且消息业务处理数达到百万级别,cpu及内存均未超过70%,符合预期;

45、(七)本发明采用1、分布式长连接技术及分布式消息引擎,实现了2、多终端消息同步、消息必达可靠,同时实现了多端消息加密、安全传输,还实现了低成本实施通讯。

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