消息传输方法、装置、终端设备及计算机可读存储介质与流程
未命名
10-19
阅读:96
评论:0
1.本发明属于计算机技术领域,尤其涉及一种消息传输方法、装置、终端设备及存储介质。
背景技术:
2.随着科技的快速发展,mqtt(message queuing telemetry transport,消息队列传输探测)协议已经成为当今世界上最受欢迎的物联网协议,并已广泛应用于车联网、智能家居、即时聊天应用和工业互联网等领域。
3.目前,mqtt协议提供了三种不同层次消息质量,但是由于三种消息级别在不同的消息质量级别的发送端和接收端之间的通信次数不同,所以无法保证不同消息质量值发布的消息之间的相对顺序。现有消息传输方法为了提高消息的传输效率,一般会在发送端采用异步发送多条消息等待ack确认字符的策略,但是该测量虽然可以有效的提高消息发送端与接收端的消息吞吐量,但弊端是在网络波动的情况下,即出现解说端ack不及时未按照既定顺序回复发送端的情况下,无法保证消息的有序性。
4.综上,如何在消息传输的业余场景中,保证消息的有序性,已经成为计算机技术领域亟待解决的技术问题。
技术实现要素:
5.本发明的主要目的在于提供一种消息传输方法、装置、终端设备及存储介质。旨在实现在消息传输的业务场景中,保证消息的有序性。
6.为了实现上述目的,本发明提供一种消息传输方法,所述消息传输方法应用于接收端,所述接收端与发送端通信连接,所述消息传输方法包括:
7.接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;
8.获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;
9.若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;
10.若是,则确定所述有序消息体对应的有序窗口执行完毕;
11.若否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。
12.可选地,所述方法还包括:
13.接收由所述发送端发出的消息体,检测所述消息体中是否包括有序窗口标识;
14.若检测到所述消息体中包括所述有序窗口标识,则确定所述消息体为有序消息体;
15.若检测到所述消息体中不包括所述有序窗口标识,则执行所述消息体中的非有序消息,并返回所述非有序消息对应的确认字符至所述发送端。
16.可选地,所述方法还包括:
17.获取所述有序消息体对应的有序消息数量,其中,所述有序消息数量为所述有序消息体对应的有序窗口中有序消息的个数;
18.基于所述有序消息数量建立所述有序窗口对应的缓存队列,其中,所述缓存队列中缓存位置的数量与所述有序消息数量相等。
19.可选地,所述方法还包括:
20.在执行所述有序消息体对应的有序窗口之前,将所述有序窗口对应的消息指针指向的缓存位置设置为所述缓存队列中的第一个缓存位置;
21.所述更新所述消息指针的步骤,包括:
22.将所述消息指针指向的缓存位置设置为所述目标缓存位置的下一个缓存位置,以更新所述消息指针。
23.可选地,在所述接收由发送端发出的有序消息体的步骤之后,所述方法还包括:
24.基于所述有序消息体中的有序窗口标识确定所述有序消息体对应的有序窗口,并检测所述有序窗口对应的缓存队列中是否存在所述有序消息体中的有序消息;
25.若所述缓存队列中存在所述有序消息,则返回所述有序消息对应的确认字符至所述发送端;
26.若所述缓存队列中不存在所述有序消息,则执行所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端的步骤。
27.可选地,所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中的步骤,包括:
28.基于所述有序消息体中的有序消息序号在预先构建的缓存队列中确定第一缓存位置,其中,所述第一缓存位置在所述缓存队列中的序号与所述有序消息序号相同;
29.将所述有序消息体中的有序消息缓存至所述第一缓存位置。
30.可选地,所述若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息的步骤,包括:
31.若检测到所述目标缓存位置存放有所述有序消息,则基于所述目标缓存位置在所述缓存队列中的序号确定有序消息序号,并获取所述有序消息序号对应的第一消息标识;
32.检测所述第一消息标识和所述有序消息的第二消息标识是否匹配;
33.若所述第一消息标识与所述第二消息标识匹配,则执行所述有序消息。
34.此外,为实现上述目的,本发明还提供一种消息传输装置,所述消息传输装置应用于接收端,所述接收端与发送端通信连接,所述消息传输装置包括:
35.缓存模块,用于接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;
36.第一检测模块,用于获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;
37.第二检测模块,用于若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;
38.执行完毕模块,用于若所述第二检测模块检测为是,则确定所述有序消息体对应的有序窗口执行完毕;
39.循环模块,用于若所述第二检测模块检测为否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。
40.此外,为实现上述目的,本发明还提供一种终端设备,所述终端设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的消息传输程序,所述终端设备的消息传输程序被所述处理器执行时实现如上所述的消息传输方法的步骤。
41.此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有消息传输程序,所述消息传输程序被处理器执行时实现如上所述的消息传输方法的步骤。
42.本发明实施例提出的一种消息传输方法、装置、终端设备及存储介质,所述方法应用于接收端,所述接收端与发送端通信连接;所述消息传输方法包括:接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;若是,则确定所述有序消息体对应的有序窗口执行完毕;若否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。
43.本发明实施例通过接收端接收来自发送端的有序消息体,将有序消息体中的有序消息缓存到预先构建的缓存队列中,同时返回该有序消息对应的确认字符至发送端,其中,该缓存队列包括多个有序的缓存位置,然后获取该有效消息体对应的消息指针,检测该消息指针当前指向的目标缓存位置是否存放了有序消息,若该目标缓存位置中有有序消息,则执行该有序消息,并检测当前的目标缓存位置是否为缓存队列中的最后一个缓存位置,若当前的目标缓存位置是缓存队列中的最后一个缓存位置,则确定该有序消息体对应的有序窗口执行完毕,若当前的目标缓存位置是缓存队列中的最后一个缓存位置,则更新该消息指针,并重新检测该消息指针指向的目标缓存位置是否存放了有序消息,相比于传统接收端收到消息就立即执行的方法,本发明通过先将接收到的待执行消息存入缓存队列,并利用消息指针指定各消息队执行顺序,从而保证消息的有序性。
附图说明
44.图1是本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图;
45.图2为本发明消息传输方法第一实施例的步骤流程示意图;
46.图3为本发明消息传输方法的一实施例所涉及的有序消息执行步骤示意图;
47.图4为本发明消息传输方法的一实施例所涉及的消息传输整体流程示意图;
48.图5为本发明消息传输装置一实施例的功能模块示意图。
49.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
50.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
51.参照图1,图1为本发明实施例方案涉及终端设备的硬件运行环境的设备结构示意图。
52.本发明实施例终端设备可以是应用于计算机技术领域的终端设备。此外,该终端设备作为接收端,接收端与发送端通信连接。具体地,该终端设备可以是智能手机、pc(personal computer,个人计算机)、平板电脑、便携计算机等等。
53.如图1所示,该终端设备可以包括:处理器1001,例如cpu,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
54.本领域技术人员可以理解,图1中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
55.如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及消息传输程序。
56.在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的消息传输程序,并执行如下操作:
57.接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;
58.获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;
59.若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;
60.若是,则确定所述有序消息体对应的有序窗口执行完毕;
61.若否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。
62.可选地,处理器1001还可以用于调用存储器1005中存储的消息传输程序,还执行如下操作:
63.接收由所述发送端发出的消息体,检测所述消息体中是否包括有序窗口标识;
64.若检测到所述消息体中包括所述有序窗口标识,则确定所述消息体为有序消息体;
65.若检测到所述消息体中不包括所述有序窗口标识,则执行所述消息体中的非有序消息,并返回所述非有序消息对应的确认字符至所述发送端。
66.可选地,处理器1001还可以用于调用存储器1005中存储的消息传输程序,还执行
如下操作:
67.获取所述有序消息体对应的有序消息数量,其中,所述有序消息数量为所述有序消息体对应的有序窗口中有序消息的个数;
68.基于所述有序消息数量建立所述有序窗口对应的缓存队列,其中,所述缓存队列中缓存位置的数量与所述有序消息数量相等。
69.可选地,处理器1001还可以用于调用存储器1005中存储的消息传输程序,还执行如下操作:
70.在执行所述有序消息体对应的有序窗口之前,将所述有序窗口对应的消息指针指向的缓存位置设置为所述缓存队列中的第一个缓存位置;
71.所述更新所述消息指针的步骤,包括:
72.将所述消息指针指向的缓存位置设置为所述目标缓存位置的下一个缓存位置,以更新所述消息指针。
73.可选地,处理器1001还可以用于调用存储器1005中存储的消息传输程序,在所述接收由发送端发出的有序消息体的步骤之后,还执行如下操作:
74.基于所述有序消息体中的有序窗口标识确定所述有序消息体对应的有序窗口,并检测所述有序窗口对应的缓存队列中是否存在所述有序消息体中的有序消息;
75.若所述缓存队列中存在所述有序消息,则返回所述有序消息对应的确认字符至所述发送端;
76.若所述缓存队列中不存在所述有序消息,则执行所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端的步骤。
77.可选地,处理器1001还可以用于调用存储器1005中存储的消息传输程序,并执行如下操作:
78.基于所述有序消息体中的有序消息序号在预先构建的缓存队列中确定第一缓存位置,其中,所述第一缓存位置在所述缓存队列中的序号与所述有序消息序号相同;
79.将所述有序消息体中的有序消息缓存至所述第一缓存位置。
80.可选地,处理器1001还可以用于调用存储器1005中存储的消息传输程序,并执行如下操作:
81.若检测到所述目标缓存位置存放有所述有序消息,则基于所述目标缓存位置在所述缓存队列中的序号确定有序消息序号,并获取所述有序消息序号对应的第一消息标识;
82.检测所述第一消息标识和所述有序消息的第二消息标识是否匹配;
83.若所述第一消息标识与所述第二消息标识匹配,则执行所述有序消息。
84.基于上述的终端设备,提出本发明消息传输方法的各实施例。
85.请参照图2,图2为本发明消息传输方法第一实施例的流程示意图。需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,本发明消息传输方法当然也可以以不同于此处的顺序执行所示出或描述的步骤。
86.在本发明消息传输方法的第一实施例中,本发明消息传输方法包括:
87.步骤s10,接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述
缓存队列包括多个有序的缓存位置;
88.在本实施例中,通过接收端接收由发送端发出的有序消息体,将有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回该有序消息对应的确认字符至发送端,其中,缓存队列包括多个有序的缓存位置。
89.需要说明的是,mqtt协议包括三种不同层次的qos(quality of service,消息质量),分别为:qos0代表,sender发送的一条消息,receiver最多能收到一次,也就是说sender尽力向receiver发送消息,如果发送失败,不会重传;qos1代表,sender发送的一条消息,receiver至少能收到一次,也就是说sender向receiver发送消息,如果发送失败,会继续重试,直到receiver收到消息为止,但是因为重传的原因,receiver有可能会收到重复的消息;qos2代表,sender发送的一条消息,receiver确保能收到而且只收到一次,也就是说sender尽力向receiver发送消息,如果发送失败,会继续重试,直到receiver收到消息为止,同时保证receiver不会因为消息重传而收到重复的消息。
90.示例性地,消息发送端按照qos1发送消息数据体到消息接收端,消息数据体即上述有序消息体,该消息数据体中包括有序消息,将该有序消息缓存到预先构建的缓存队列中,并返回该有序消息对应的ack(acknowledge character,确认字符),另外,需要说明的是,上述缓存队列包括多个有序的缓存位置,每个缓存位置可以用于存放一条有序消息。
91.进一步地,在一种可行的实施例中,本发明消息传输方法,还可以包括:
92.步骤a10,获取所述有序消息体对应的有序消息数量,其中,所述有序消息数量为所述有序消息体对应的有序窗口中有序消息的个数;
93.步骤a20,基于所述有序消息数量建立所述有序窗口对应的缓存队列,其中,所述缓存队列中缓存位置的数量与所述有序消息数量相等。
94.在本实施例中,接收端获取当前接收到的有序消息体对应的有序消息数量,其中,该有序消息数量为有序消息体对应的有序窗口中有序消息的个数,基于有序消息数量建立有序窗口对应的缓存队列,其中,缓存队列中缓存位置的数量与有序消息数量相等。
95.需要说明的是,本发明在消息数据体中定义了有序窗口大小,即上述有序消息数量,用于通知接收方当前有序窗口中有序消息的个数。
96.示例性地,接收端从接收到的有序消息体中获取当前有序窗口对应的有序消息数量,假设该有序消息数量为4,那么建立包括4个缓存位置的缓存队列。
97.进一步地,在一种可行的实施例中,上述步骤s10中,“将所述有序消息体中的有序消息缓存至预先构建的缓存队列中”的步骤,可以包括:
98.步骤s101,基于所述有序消息体中的有序消息序号在预先构建的缓存队列中确定第一缓存位置,其中,所述第一缓存位置在所述缓存队列中的序号与所述有序消息序号相同;
99.步骤s102,将所述有序消息体中的有序消息缓存至所述第一缓存位置。
100.在本实施例中,基于有序消息体中的有序消息序号在预先构建的缓存队列中确定对应的缓存位置(以下成为第一缓存位置以示区分),其中,第一缓存位置在缓存队列中的序号与有序消息序号相同,然后将有序消息体中的有序消息缓存至第一缓存位置。
101.需要说明的是,本发明在消息数据体中定义了有序窗口序号,即上述有序消息序号,用于标记当前有序消息在有序窗口中的序号,序号从0开始。
102.示例性地,假设当前接收到的有序消息体的有序消息序号为0,那么将该有序消息体中的有序消息缓存至缓存队列的第一个缓存位置,其中,该缓存位置的序号可以理解为0。
103.步骤s20,获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;
104.在本实施例中,接收端获取有序消息体对应的消息指针,并检测消息指针指向的缓存位置(以下称为目标缓存位置以示区分)是否存放有有序消息。
105.需要说明的是,本发明在消息数据体中定义了有序窗口id,用于确定有序窗口的唯一性。还在接收端定义了待执行有序窗口消息指针,用于在接收端记录对应的有序窗口当前执行到的位置,本发明将消息指针指向的位置定义为待执行的位置,应当理解的是,该消息指针可以指向已执行的位置,也可以指向待执行的位置。
106.在一可行实施方式中,接收端从接收到的消息数据体中获取当前执行的有序窗口的有序窗口id,然后获取当前有序窗口对应的消息指针,其中,该消息指针用于指向下一个待执行的有序消息所在的缓存位置,确定该消息指针当前指向的缓存位置,即上述目标缓存位置,并检测该目标缓存位置中是否已经存放了有序消息。
107.在另一可行实施方式中,如果此有序窗口序号为0的消息则立即执行此消息,向发送端返回ack。查看是否有后续序号1,如已存在序号1则执行序号1,并向后以此判断直至无后续有序窗口序号或已达到有序窗口最大序号即有序窗口所有消息执行完毕;如果此消息窗口序号大于0(假设为n),则按有序窗口序号放入缓存集合中,并向发送端返回ack。同时接收端查看当前有序窗口消息指针,当指针为(n-1)时,则执行此消息并检查是否存在有序窗口序号为(n+1)的消息,如果存在则继续执行直至无后续有序窗口序号或已达到有序窗口最大值即有序窗口所有消息执行完毕。
108.进一步地,在一种可行的实施例中,本发明消息传输方法,还可以包括:
109.步骤b10,在执行所述有序消息体对应的有序窗口之前,将所述有序窗口对应的消息指针指向的缓存位置设置为所述缓存队列中的第一个缓存位置;
110.在本实施例中,在执行有序消息体对应的有序窗口之前,将有序窗口对应的消息指针指向的缓存位置设置为缓存队列中的第一个缓存位置。
111.示例性地,确定当前接收到的有序消息体对应的有序窗口,在执行该有序窗口中的有序消息之前,将该有序窗口对应的消息指针指向的位置设置为缓存队列中的第一个缓存位置。
112.步骤s30,若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;
113.在本实施例中,若接收端检测到目标缓存位置存放有有序消息,则执行该有序消息,并进一步检测目标缓存位置是否为缓存队列中的最后一个缓存位置。
114.示例性地,假设当前有序窗口对应的缓存队列包括4个有序的缓存位置,其中,第一个缓存位置存放有有序消息,其他缓存位置为空,且当前接收到的有序消息体中的有序消息存放在第二个缓存位置,获取消息指针,检测到消息指针当前指向的目标缓存位置为第二个缓存位置,那么,进一步确定该位置存放了有序消息,执行第二个缓存位置中的有序消息,然后检测该目标缓存位置是否为缓存队列中的最后一个位置。
115.进一步地,在一种可行的实施例中,上述步骤s30中,“若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息”的步骤,可以包括:
116.步骤s301,若检测到所述目标缓存位置存放有所述有序消息,则基于所述目标缓存位置在所述缓存队列中的序号确定有序消息序号,并获取所述有序消息序号对应的第一消息标识;
117.步骤s302,检测所述第一消息标识和所述有序消息的第二消息标识是否匹配;
118.步骤s303,若所述第一消息标识与所述第二消息标识匹配,则执行所述有序消息。
119.在本实施例中,接收端若检测到目标缓存位置存放了有序消息,则基于目标缓存位置在缓存队列中的序号确定有序消息序号,并获取有序消息序号对应的消息标识(以下称为第一消息标识以示区分),检测第一消息标识和有序消息的消息标识(以下称为第二消息标识以示区分)是否匹配;若第一消息标识与第二消息标识匹配,则执行当前有序消息。
120.需要说明的是,本发明在消息数据体中定义了消息id,即上述消息标识,用于确定有序消息的唯一性。
121.示例性地,接收端在检测到消息指针当前指向的目标缓存位置存放了有序消息时,基于目标缓存位置在缓存队列中的序号确定有序消息序号,具体的,假设当前目标缓存位置的序号为2,那么获取有序消息序号为2的有序消息体,从该有序消息体中获取消息标识,即上述第一消息标识,然后获取存放在目标缓存位置的有序消息对应的消息标识,即上述第二消息标识,将第一消息标识和第二消息标识进行匹配,在匹配一致时,指向该目标缓存位置中的有序消息,另外,若不匹配,则不执行该有序消息,并输出报错信息以提醒运维人员进行程序修复。如此,保证了有序消息的安全性,进而确保执行有序消息的有序性。
122.步骤s40,若是,则确定所述有序消息体对应的有序窗口执行完毕;
123.在本实施例中,接收端若检测到当前的目标缓存位置是缓存队列中的最后一个缓存位置,则确定当前有序消息体对应的有序窗口执行完毕。
124.示例性地,假设当前有序窗口对应的缓存队列包括4个有序的缓存位置,其中,前三个缓存位置均已经存放了有序消息,其他缓存位置为空,且当前接收到的有序消息体中的有序消息存放在第四个缓存位置,获取消息指针,检测到消息指针当前指向的目标缓存位置为第四个缓存位置,那么执行第四个缓存位置中存放的有序消息,且确定当前目标缓存位置就是缓存队列中的最后一个缓存位置,所以,可以确定当前有序消息体对应的有序窗口中全部的有序消息均执行完毕。
125.步骤s50,若否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。
126.在本实施例中,接收端若检测到当前的目标缓存位置不是缓存队列中的最后一个缓存位置,则更新消息指针,并重新执行上述检测更新后的消息指针指向的目标缓存位置是否需存放了有序消息。
127.进一步地,在一种可行的实施例中,步骤s50中,“更新所述消息指针”的步骤,可以包括:
128.步骤b20,将所述消息指针指向的缓存位置设置为所述目标缓存位置的下一个缓存位置,以更新所述消息指针。
129.在本实施例中,将消息指针指向的缓存位置设置为目标缓存位置的下一个缓存位
置,以更新该消息指针。
130.示例性地,假设当前有序窗口对应的缓存队列包括4个有序的缓存位置,其中,第一个缓存位置和第三个缓存位置存放了有序消息,其他缓存位置为空,且当前接收到的有序消息体中的有序消息存放在第二个缓存位置,获取消息指针,检测到消息指针当前指向的目标缓存位置为第二个缓存位置,那么,执行第二个缓存位置中的有序消息,更新消息指针,更新后的消息指针指向的缓存位置为第三个缓存位置,那么,执行第三个缓存位置中的有序消息,并再次更新消息指针,更新后的消息指针指向的缓存位置为第四个缓存位置,检测到第四个缓存位置为空,所以等待后续消息。
131.示例性地,如图3所示,有序消息执行步骤示意图,msg_id表示消息id,win_id表示有序窗口id,win_size表示有序窗口大小,win_no表示有序窗口序号,发送端第一次发出的是有序窗口序号为0的有序消息体,接收端成功接收,将该有序消息体放入队列的第一个缓存位置,并返回该消息id对应的ack至发送端,同时执行第一个缓存位置中的消息;发送端第二次发出的是有序窗口序号为1的有序消息体,但接收端接收失败;发送端第三次发出的是有序窗口序号为2的有序消息体,接收端成功接收,将该有序消息体放入队列的第三个缓存位置,并返回该消息id对应的ack至发送端;发送端第四次发出的是有序窗口序号为3的有序消息体,接收端成功接收,将该有序消息体放入队列的第四个缓存位置,并返回该消息id对应的ack至发送端;发送端第五次发出的是有序窗口序号为1的有序消息体,接收端成功接收,将该有序消息体放入队列的第二个缓存位置,并返回该消息id对应的ack至发送端,同时,依次执行缓存队列中第二个缓存位置、第三个缓存位置和第四个缓存位置中的有序消息。
132.在本实施例中,本发明消息传输方法通过接收端接收由发送端发出的有序消息体,基于有序消息体中的有序消息序号在预先构建的缓存队列中确定对应的第一缓存位置,将有序消息体中的有序消息缓存至第一缓存位置,并返回该有序消息对应的确认字符至发送端,其中,缓存队列包括多个有序的缓存位置;接收端获取当前接收到的有序消息体对应的有序消息数量,其中,该有序消息数量为有序消息体对应的有序窗口中有序消息的个数,基于有序消息数量建立有序窗口对应的缓存队列,其中,缓存队列中缓存位置的数量与有序消息数量相等;接收端获取有序消息体对应的消息指针,并检测消息指针指向的目标缓存位置是否存放有有序消息;在执行有序消息体对应的有序窗口之前,将有序窗口对应的消息指针指向的缓存位置设置为缓存队列中的第一个缓存位置;若接收端检测到目标缓存位置存放有有序消息,则执行该有序消息,并进一步检测目标缓存位置是否为缓存队列中的最后一个缓存位置;接收端若检测到目标缓存位置存放了有序消息,则基于目标缓存位置在缓存队列中的序号确定有序消息序号,并获取有序消息序号对应的第一消息标识,检测第一消息标识和有序消息的第二消息标识是否匹配;若第一消息标识与第二消息标识匹配,则执行当前有序消息;接收端若检测到当前的目标缓存位置是缓存队列中的最后一个缓存位置,则确定当前有序消息体对应的有序窗口执行完毕;接收端若检测到当前的目标缓存位置不是缓存队列中的最后一个缓存位置,则将消息指针指向的缓存位置设置为目标缓存位置的下一个缓存位置,以更新该消息指针,并重新执行上述检测更新后的消息指针指向的目标缓存位置是否需存放了有序消息。
133.如此,本发明实施例通过接收端接收来自发送端的有序消息体,将有序消息体中
的有序消息缓存到预先构建的缓存队列中,同时返回该有序消息对应的确认字符至发送端,其中,该缓存队列包括多个有序的缓存位置,然后获取该有效消息体对应的消息指针,检测该消息指针当前指向的目标缓存位置是否存放了有序消息,若该目标缓存位置中有有序消息,则执行该有序消息,并检测当前的目标缓存位置是否为缓存队列中的最后一个缓存位置,若当前的目标缓存位置是缓存队列中的最后一个缓存位置,则确定该有序消息体对应的有序窗口执行完毕,若当前的目标缓存位置是缓存队列中的最后一个缓存位置,则更新该消息指针,并重新检测该消息指针指向的目标缓存位置是否存放了有序消息,相比于传统接收端收到消息就立即执行的方法,本发明通过先将接收到的待执行消息存入缓存队列,并利用消息指针指定各消息队执行顺序,从而保证消息的有序性。
134.进一步地,基于上述本发明消息传输方法的第一实施例,提出本发明消息传输方法的第二实施例。
135.在本实施例中,本发明消息传输方法,还可以包括:
136.步骤c10,接收由所述发送端发出的消息体,检测所述消息体中是否包括有序窗口标识;
137.步骤c20,若检测到所述消息体中包括所述有序窗口标识,则确定所述消息体为有序消息体;
138.步骤c30,若检测到所述消息体中不包括所述有序窗口标识,则执行所述消息体中的非有序消息,并返回所述非有序消息对应的确认字符至所述发送端。
139.在本实施例中,接收端接收由发送端发出的消息体,检测消息体中是否包括有序窗口标识,若检测到消息体中包括有序窗口标识,则确定消息体为有序消息体,若检测到消息体中不包括有序窗口标识,则直接执行消息体中的非有序消息,并返回非有序消息对应的确认字符至发送端。
140.示例性地,接收端在接收到消息体时,首先检测该消息体中是否有有序窗口标识,若该消息体中有有序窗口标识,则确定该消息体为有序消息体,将有序消息体中的有序消息先缓存到缓存队列,再根据该有序窗口对应的消息指针逐个执行缓存队列中的有序消息,若该消息体中没有有序窗口标识,那么直接执行该消息体中的非有序消息,并返回该非有序消息对应的ack至发送端。
141.进一步地,在一种可行的实施例中,在上述步骤s10中,“接收由发送端发出的有序消息体”的步骤之后,还可以包括:
142.步骤d10,基于所述有序消息体中的有序窗口标识确定所述有序消息体对应的有序窗口,并检测所述有序窗口对应的缓存队列中是否存在所述有序消息体中的有序消息;
143.步骤d20,若所述缓存队列中存在所述有序消息,则返回所述有序消息对应的确认字符至所述发送端;
144.步骤d30,若所述缓存队列中不存在所述有序消息,则执行所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端的步骤。
145.在本实施例中,基于当前接收到的有序消息体中的有序窗口标识确定该有序消息体对应的有序窗口,然后检测该有序窗口对应的缓存队列中是否存在当前有序消息体中的有序消息,若存在,则直接返回该有序消息对应的确认字符至发送端,若不存在,则将该有
序消息体中的有序消息缓存到该有序窗口对应的缓存队列中,并返回该有序消息对应的确认字符至发送端。
146.示例性地,接收端在检测到接收到的消息体为有序消息体之后,根据有序窗口id查找对应的有序窗口集合判断当前有序消息是否已经接收过,如果已经接收过,则接收端向发送端返回ack,如果未接收过,则把该有序消息存放至有序窗口id对应的缓存队列中。
147.示例性地,如图4所示,消息传输整体流程示意图,首先,通过发送端构造有序消息体发送至接收端,同时,从发出的时刻开始等待一定时间,判断是否接收到表示接收端成功接收当次有序消息体的ack;接收端在收到有序消息体后,检测该消息体是否为有序消息,若是,则继续判断该有序消息体对应的有序窗口是否已经建立,若否,则由接收端执行当前接收到的消息;若不存在上述有序窗口,则新建有序窗口,若存在上述有序窗口,则检测有序窗口内用于存放当前有序消息体的对应位置是否已经存放了消息;若该对应位置已经有值,则直接向发送端返回ack,若该对应位置为空,则将当前有序消息存放到对应位置,再想发送端返回ack;接收端检测当前消息指针是否在等待当前序号消息,若是,则执行该消息,并将消息指针后移一位,若否,则继续等待后续消息;然后,根据更新后的消息指针指向执行下一个有序消息,直到执行完当前有序窗口中的最后一个有序消息。
148.在本实施例中,本发明消息传输方法通过接收端接收由发送端发出的消息体,检测消息体中是否包括有序窗口标识,若检测到消息体中包括有序窗口标识,则确定消息体为有序消息体,若检测到消息体中不包括有序窗口标识,则直接执行消息体中的非有序消息,并返回该非有序消息对应的确认字符至发送端;基于当前接收到的有序消息体中的有序窗口标识确定该有序消息体对应的有序窗口,然后检测该有序窗口对应的缓存队列中是否存在当前有序消息体中的有序消息,若存在,则直接返回该有序消息对应的确认字符至发送端,若不存在,则将该有序消息体中的有序消息缓存到该有序窗口对应的缓存队列中,并返回该有序消息对应的确认字符至发送端。
149.如此,接收端在接收到任一消息时,先判断是否为有序消息,确保针对有序消息,实现有序性,另外,通过在接收到重复消息时,再次返回ack,从而解决在基于mqtt的业务场景中,消息质量为qos 0或qos 1时收到重复消息的问题。
150.此外,本发明实施例还提供一种消息传输装置,该消息传输装置应用于接收端,该接收端与发送端通信连接。
151.请参照图5,图5为本发明消息传输装置一实施例的功能模块示意图,如图5所示,本发明消息传输装置包括:
152.缓存模块10,用于接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;
153.第一检测模块20,用于获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;
154.第二检测模块30,用于若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;
155.执行完毕模块40,用于若所述第二检测模块检测为是,则确定所述有序消息体对应的有序窗口执行完毕;
156.循环模块50,用于若所述第二检测模块检测为否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。
157.可选地,本发明消息传输装置,还包括:
158.消息体检测模块,用于接收由所述发送端发出的消息体,检测所述消息体中是否包括有序窗口标识;
159.有序消息体模块,用于若检测到所述消息体中包括所述有序窗口标识,则确定所述消息体为有序消息体;
160.消息执行模块,用于若检测到所述消息体中不包括所述有序窗口标识,则执行所述消息体中的非有序消息,并返回所述非有序消息对应的确认字符至所述发送端。
161.可选地,本发明消息传输装置,还包括:
162.有序消息数量模块,用于获取所述有序消息体对应的有序消息数量,其中,所述有序消息数量为所述有序消息体对应的有序窗口中有序消息的个数;
163.缓存队列模块,用于基于所述有序消息数量建立所述有序窗口对应的缓存队列,其中,所述缓存队列中缓存位置的数量与所述有序消息数量相等。
164.可选地,本发明消息传输装置,还包括:
165.初始设置模块,用于在执行所述有序消息体对应的有序窗口之前,将所述有序窗口对应的消息指针指向的缓存位置设置为所述缓存队列中的第一个缓存位置;
166.循环模块50,包括:
167.指针更新单元,用于将所述消息指针指向的缓存位置设置为所述目标缓存位置的下一个缓存位置,以更新所述消息指针。
168.可选地,本发明消息传输装置,还包括:
169.有序消息检测模块,用于基于所述有序消息体中的有序窗口标识确定所述有序消息体对应的有序窗口,并检测所述有序窗口对应的缓存队列中是否存在所述有序消息体中的有序消息;
170.第一确认字符模块,用于若所述缓存队列中存在所述有序消息,则返回所述有序消息对应的确认字符至所述发送端;
171.第二确认字符模块,用于若所述缓存队列中不存在所述有序消息,则执行所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端的步骤。
172.可选地,缓存模块10,包括:
173.缓存位置确定单元,用于基于所述有序消息体中的有序消息序号在预先构建的缓存队列中确定第一缓存位置,其中,所述第一缓存位置在所述缓存队列中的序号与所述有序消息序号相同;
174.缓存单元,用于将所述有序消息体中的有序消息缓存至所述第一缓存位置。
175.可选地,第二检测模块30,包括:
176.消息标识获取单元,用于若检测到所述目标缓存位置存放有所述有序消息,则基于所述目标缓存位置在所述缓存队列中的序号确定有序消息序号,并获取所述有序消息序号对应的第一消息标识;
177.匹配单元,用于检测所述第一消息标识和所述有序消息的第二消息标识是否匹
配;
178.执行单元,用于若所述第一消息标识与所述第二消息标识匹配,则执行所述有序消息。
179.本发明还提供一种计算机存储介质,该计算机存储介质上存储有消息传输程序,上述消息传输程序被处理器执行时实现如以上任一项实施例所述的消息传输程序方法的步骤。
180.本发明计算机存储介质的具体实施例与上述本发明消息传输程序方法各实施例基本相同,在此不作赘述。
181.本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如以上任一项实施例所述的本发明消息传输方法的步骤,在此不作赘述。
182.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
183.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
184.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是tws耳机等)执行本发明各个实施例所述的方法。
185.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
技术特征:
1.一种消息传输方法,其特征在于,所述消息传输方法应用于接收端,所述接收端与发送端通信连接,所述消息传输方法包括:接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;若是,则确定所述有序消息体对应的有序窗口执行完毕;若否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。2.如权利要求1所述的消息传输方法,其特征在于,所述方法还包括:接收由所述发送端发出的消息体,检测所述消息体中是否包括有序窗口标识;若检测到所述消息体中包括所述有序窗口标识,则确定所述消息体为有序消息体;若检测到所述消息体中不包括所述有序窗口标识,则执行所述消息体中的非有序消息,并返回所述非有序消息对应的确认字符至所述发送端。3.如权利要求1所述的消息传输方法,其特征在于,所述方法还包括:获取所述有序消息体对应的有序消息数量,其中,所述有序消息数量为所述有序消息体对应的有序窗口中有序消息的个数;基于所述有序消息数量建立所述有序窗口对应的缓存队列,其中,所述缓存队列中缓存位置的数量与所述有序消息数量相等。4.如权利要求1所述的消息传输方法,其特征在于,所述方法还包括:在执行所述有序消息体对应的有序窗口之前,将所述有序窗口对应的消息指针指向的缓存位置设置为所述缓存队列中的第一个缓存位置;所述更新所述消息指针的步骤,包括:将所述消息指针指向的缓存位置设置为所述目标缓存位置的下一个缓存位置,以更新所述消息指针。5.如权利要求1所述的消息传输方法,其特征在于,在所述接收由发送端发出的有序消息体的步骤之后,所述方法还包括:基于所述有序消息体中的有序窗口标识确定所述有序消息体对应的有序窗口,并检测所述有序窗口对应的缓存队列中是否存在所述有序消息体中的有序消息;若所述缓存队列中存在所述有序消息,则返回所述有序消息对应的确认字符至所述发送端;若所述缓存队列中不存在所述有序消息,则执行所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端的步骤。6.如权利要求1所述的消息传输方法,其特征在于,所述将所述有序消息体中的有序消息缓存至预先构建的缓存队列中的步骤,包括:
基于所述有序消息体中的有序消息序号在预先构建的缓存队列中确定第一缓存位置,其中,所述第一缓存位置在所述缓存队列中的序号与所述有序消息序号相同;将所述有序消息体中的有序消息缓存至所述第一缓存位置。7.如权利要求1所述的消息传输方法,其特征在于,所述若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息的步骤,包括:若检测到所述目标缓存位置存放有所述有序消息,则基于所述目标缓存位置在所述缓存队列中的序号确定有序消息序号,并获取所述有序消息序号对应的第一消息标识;检测所述第一消息标识和所述有序消息的第二消息标识是否匹配;若所述第一消息标识与所述第二消息标识匹配,则执行所述有序消息。8.一种消息传输装置,其特征在于,所述消息传输装置应用于接收端,所述接收端与发送端通信连接,所述消息传输装置包括:缓存模块,用于接收由发送端发出的有序消息体,将所述有序消息体中的有序消息缓存至预先构建的缓存队列中,并返回所述有序消息对应的确认字符至所述发送端,其中,所述缓存队列包括多个有序的缓存位置;第一检测模块,用于获取所述有序消息体对应的消息指针,检测所述消息指针指向的目标缓存位置是否存放有所述有序消息;第二检测模块,用于若检测到所述目标缓存位置存放有所述有序消息,则执行所述有序消息,并检测所述目标缓存位置是否为所述缓存队列中的最后一个缓存位置;执行完毕模块,用于若所述第二检测模块检测为是,则确定所述有序消息体对应的有序窗口执行完毕;循环模块,用于若所述第二检测模块检测为否,则更新所述消息指针,并返回执行所述检测所述消息指针指向的目标缓存位置是否存放有所述有序消息的步骤。9.一种终端设备,其特征在于,所述终端设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的消息传输程序,所述消息传输程序被所述处理器执行时实现如权利要求1至7中任一项所述的消息传输方法的步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有消息传输程序,所述消息传输程序被处理器执行时实现如权利要求1至7中任一项所述的消息传输方法的步骤。
技术总结
本发明公开了一种消息传输方法、装置、终端设备及存储介质,该方法应用于接收端,接收端与发送端通信连接;该方法通过接收由发送端发出的有序消息体,将有序消息体中的有序消息缓存至预先构建的缓存队列中,返回有序消息对应的确认字符至发送端;获取有序消息体对应的消息指针,检测消息指针指向的目标缓存位置是否存放有有序消息;若检测到目标缓存位置存放有有序消息,则执行有序消息,检测目标缓存位置是否为缓存队列中的最后一个缓存位置;若是,则确定有序消息体对应的有序窗口执行完毕;若否,则更新消息指针,返回执行检测消息指针指向的目标缓存位置是否存放有有序消息的步骤。本发明实现了在消息传输的业余场景中,保证消息的有序性。保证消息的有序性。保证消息的有序性。
技术研发人员:王建伟
受保护的技术使用者:深圳创维数字技术有限公司
技术研发日:2023.07.14
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
