丢失消息补偿方法、装置、计算机设备及存储介质与流程

文档序号:33178826发布日期:2023-02-04 04:23阅读:45来源:国知局
丢失消息补偿方法、装置、计算机设备及存储介质与流程

1.本发明涉及即时通讯领域,尤其涉及一种丢失消息补偿方法、装置、计算机设备及存储介质。


背景技术:

2.现有技术中,即时聊天工具在拉取离线消息时,只拉取一定时间范围内的消息。若用户长时间未登录,或者在新设备登录时,无法接收在时间范围外的消息。而且,用户在查看本地聊天记录时,本地聊天记录可能存在消息丢失的问题。


技术实现要素:

3.基于此,有必要针对上述技术问题,提供一种丢失消息补偿方法、装置、计算机设备及存储介质,以使用户可以接收到完整的消息记录。
4.一种丢失消息补偿方法,包括:
5.定期检查本地丢失消息记录表是否包括丢失消息;
6.若所述本地丢失消息记录表包含所述丢失消息,则向服务端获取与所述丢失消息匹配的更新消息;
7.根据所述更新消息更新所述本地缓存消息。
8.一种丢失消息补偿装置,包括:
9.定期检查模块,用于定期检查本地丢失消息记录表是否包括丢失消息;
10.获取更新消息模块,用于若所述本地丢失消息记录表包含所述丢失消息,则向服务端获取与所述丢失消息匹配的更新消息;
11.更新消息模块,用于根据所述更新消息更新所述本地缓存消息。
12.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现上述丢失消息补偿方法。
13.一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如上述丢失消息补偿方法。
14.上述丢失消息补偿方法、装置、计算机设备及存储介质,通过定时检查本地丢失消息记录表,执行丢失消息的补偿,可以避免瞬时网络请求过高的问题;通过消息补偿,可以使用户接收到完整的消息记录。
附图说明
15.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
16.图1是本发明一实施例中丢失消息补偿方法的一应用环境示意图;
17.图2是本发明一实施例中丢失消息补偿方法的一流程示意图;
18.图3是本发明一实施例中丢失消息补偿装置的一结构示意图;
19.图4是本发明一实施例中计算机设备的一示意图。
具体实施方式
20.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
21.本实施例提供的丢失消息补偿方法,可应用在如图1的应用环境中,其中,客户端与服务端进行通信。其中,客户端包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
22.在一实施例中,如图2所示,提供一种丢失消息补偿方法,以该方法应用在图1中的服务端为例进行说明,包括如下步骤s40-s60。
23.s40、定期检查本地丢失消息记录表是否包括丢失消息;
24.s50、若所述本地丢失消息记录表包含所述丢失消息,则向服务端获取与所述丢失消息匹配的更新消息。
25.可理解地,可以设置一个定时器,定时检查本地丢失消息记录表是否包括丢失消息。定时器的时间间隔可以根据实际需要进行设置。若本地丢失消息记录表包含丢失消息,则向服务端获取与丢失消息匹配的更新消息。若本地丢失消息记录表包含丢失消息,则不需要获取更新消息。本地丢失消息记录表可以记录一个或多个丢失消息的标识。
26.在此处,不同设备(智能手机)的定时器的时间可以是不一样的,如手机a在01分请求更新,手机b在02分请求更新。这样避免瞬时的网络请求过高的情况。
27.s60、根据所述更新消息更新所述本地缓存消息。
28.可理解地,在获得更新信息之后,可以使用该更新信息对本地缓存消息。在更新完毕之后,用户可以看到更新后的本地缓存消息。
29.本实施例通过本地丢失消息记录表记录丢失消息,通过定时检查本地丢失消息记录表,执行丢失消息的补偿,可以避免瞬时网络请求过高的问题。
30.可选地,步骤s40之前,即所述定期检查本地丢失消息记录表是否包括丢失消息之前,还包括如下步骤s10-s30。
31.s10、在检测到消息补偿的触发事件时,向服务端发送基于所述触发事件生成的消息队列获取请求。
32.可理解地,触发事件包括但不限于收到好友申请消息、收到在先群通知的消息、消息发送成功、拉取个人聊天历史消息、拉取群组聊天历史消息、通过群id拉群群丢失消息、首次连接。不同的触发事件,其生成的消息队列获取请求一般是不相同的。消息队列获取请求定义了消息队列的获取范围。
33.s20、接收服务端返回的用于响应所述消息队列获取请求的消息队列。
34.可理解地,消息队列指的是多条消息的简要信息。在一些情况下,简要信息可以是有长度限制的文本信息(如果某条信息超出长度限制,则截取前面部分的文本),也可以是验证信息,如图片或视频的md5码。消息队列的作用在于验证本地缓存消息的完整性。
35.s30、根据所述消息队列检查本地缓存消息是否存在丢失消息,存在丢失消息时,将所述丢失消息的标识写入本地丢失消息记录表中。
36.可理解地,可以将消息队列与本地缓存消息进行比对,以检查是否存在丢失消息。在此处,丢失消息指的是存在于本地缓存缺失的消息。每一条消息都有唯一的标识,如可以是序列号。检查丢失消息的算法可以根据实际需要进行设置,如可以是冒泡排序、归并排序等。优选归并排序算法,该算法可以降低时间复杂度。
37.当消息队列存在本地缓存没有保存的丢失消息时,可以将该丢失消息的标识写入本地丢失消息记录表中。本地丢失消息记录表可以记录一个或多个丢失消息的标识。
38.本实施例在逻辑上将消息的丢失检查和补偿拉取解耦,只有socket通道在线获取的消息(即在线消息)进行遗漏检查的时候才会实时触发补偿拉取,其他情况都是通过既定的定时器定期检查缓存(本地丢失消息记录表)拉取,避免瞬时的网络请求过高的情况,提高代码的可维护性。而且,本实施例提供的丢失消息补偿方法,采用类似于触发器的方式触发执行检查遗漏、定时器执行拉取遗漏,业务代码不需要做额外的特殊处理。
39.可选地,步骤s10,即所述在检测到消息补偿的触发事件时,向服务端发送基于所述触发事件生成的消息队列获取请求,包括:
40.s101、在所述触发事件为拉取指定会话id的历史消息时,获取处于会话窗口的最早消息;
41.s102、根据所述最早消息确定第一队列获取区间;
42.s103、根据所述第一队列获取区间生成所述消息队列获取请求。
43.可理解地,用户在查看指定会话id(identity document,标识符)时,触发消息补偿。指定会话id可以是好友id,也可以是群id。处于会话窗口的最早消息,可以指当前会话窗口可支持显示的最早消息。不同的即时通讯软件,其对“处于会话窗口的最早消息”,可以进行不同的定义。
44.在确定最早消息之后,可以根据最早消息确定指定会话id的第一队列获取区间。在一些示例中,第一队列获取区间可以指最早消息以及最早消息之后的消息。例如,最早消息的消息序号为000568,第一队列获取区间可表示为[000568,000568+p],p为每次消息队列获取请求的最大值。在另一些示例中,第一队列获取区间可以指最早消息之前的指定个数的在先消息,以及在先消息之后的消息。例如,最早消息的消息序号为000568,指定个数为30,第一队列获取区间可表示为[000538,000538+p],p为每次消息队列获取请求的最大值。
[0045]
本实施例中,用户在查看历史消息时会触发消息队列获取请求,通过消息队列获取请求可以获取到用于检查第一队列获取区间内的消息是否完整的消息队列。
[0046]
可选地,步骤s10,即所述在检测到消息补偿的触发事件时,向服务端发送基于所述触发事件生成的消息队列获取请求,包括:
[0047]
s104、在所述触发事件为收到在先群通知时,根据所述在先群通知确定第二队列获取区间;
[0048]
s105、根据所述第二队列获取区间生成所述消息队列获取请求。
[0049]
可理解地,在先群通知可以指用户在未登陆即时通讯软件期间产生的群通知。例如,用户有三个月没有登陆某即时通讯软件,在先群通知可以是这三个月中的某一时间点系统产生的群通知。
[0050]
可以根据在先群通知的推送时间确定第二队列获取区间。在一些示例中,第二队列获取区间可以指在先群通知的推送时间以及该时间之后的消息。例如,在先群通知的推送时间为2022年9月1号,第二队列获取区间为2022年9月1号及之后的所有消息。在另一些示例中,第一队列获取区间可以指在先群通知的推送时间的指定时间阈值的在先消息,以及在先消息之后的消息。例如,在先群通知的推送时间为2022年9月1号,指定时间阈值为3天,则第二队列获取区间为2022年8月29号及之后的所有消息。
[0051]
需要注意的是,每次消息队列获取请求的消息数量存在最大值。若第二队列获取区间内的消息大于最大值,则需要分别生成多个消息队列获取请求,每一消息队列获取请求的消息数量小于最大值。
[0052]
本实施例中,用户终端接收到在先群通知时会触发消息队列获取请求,通过消息队列获取请求可以获取到用于检查第二队列获取区间内的消息是否完整的消息队列。
[0053]
可选地,步骤s30,即所述根据所述消息队列检查本地缓存消息是否存在丢失消息,存在丢失消息时,将所述丢失消息写入本地丢失消息记录表中,包括:
[0054]
s301、若本地缓存消息为个人消息缓存,则将消息队列的第一条消息与所述个人消息缓存的最新消息进行比对,生成个人比对结果;
[0055]
s302、若所述个人比对结果为不相等,则检查所述消息队列的连续性,生成个人检查结果;
[0056]
s303、根据所述个人比对结果和所述个人检查结果确定个人丢失消息;
[0057]
s304、将所述个人丢失消息写入本地丢失消息记录表中。
[0058]
可理解地,本地缓存消息指的是与消息队列对应的本地消息,如第一队列获取区间内的本地消息。本地缓存消息可分为个人消息和群消息。若本地缓存消息为个人消息缓存,则将消息队列的第一条消息与个人消息缓存的最新消息进行比对,生成个人比对结果。
[0059]
个人比对结果包括相等和不相等。若个人比对结果为相等,说明相较于本地缓存消息,服务端无新增消息。此时,仅需要检查本地缓存消息的连续性。若本地缓存消息具有连续性,则说明本地缓存消息是完整的,不需要拉取丢失消息。若本地缓存消息不具有连续性,则说明本地缓存消息存在丢失消息,需要拉取丢失消息。
[0060]
若个人比对结果为不相等,则检查消息队列的连续性,生成个人检查结果。个人检查结果包括两种,一种是消息队列具有连续性,另一种是消息队列不具有连续性。若消息队列具有连续性,说明消息队列是完整的。此时可以使用消息队列与本地缓存消息逐一比对,确定出个人丢失消息,再将个人丢失消息写入本地丢失消息记录表中。
[0061]
若消息队列不具有连续性,说明消息队列是不完整的。此时需要重新发送消息队列获取请求,以获取完整的消息队列,再根据使用消息队列与本地缓存消息逐一比对,确定出个人丢失消息。
[0062]
本实施例先判断服务端是否包含新增消息(即个人比对结果,相较于本地缓存消息),再检查消息队列的完整性(个人检查结果),防止消息队列在传送过程的消息丢失导致
消息不完整,最后根据消息队列检查出本地缓存缺失的消息。
[0063]
可选地,步骤s30,即所述根据所述消息队列检查本地缓存消息是否存在丢失消息,存在丢失消息时,将所述丢失消息写入本地丢失消息记录表中,包括:
[0064]
s305、若本地缓存消息为群聊消息缓存,则将消息队列与所述群聊消息缓存进行比对,生成群聊比对结果;
[0065]
s306、若所述群聊比对结果为不相等,则根据所述群聊比对结果确定第一群聊丢失消息;
[0066]
s307、若所述群聊比对结果为相等,则根据所述群聊消息缓存的最新消息确定第二群聊丢失消息;
[0067]
s308、将所述第一群聊丢失消息或所述第二群聊丢失消息写入所述本地丢失消息记录表中。
[0068]
可理解地,若本地缓存消息为群聊消息缓存,则将消息队列与群聊消息缓存进行比对,生成群聊比对结果。群聊比对结果包括两种,一种为相等,另一种为不相等。群聊比对结果为相等指的是,群聊消息缓存的n条消息(n为群聊消息缓存的消息总个数)与消息队列中时间最早的n条消息相同。群聊比对结果为不相等指的是,群聊消息缓存的n条消息与消息队列中时间最早的n条消息不相同。
[0069]
若群聊比对结果为不相等,则根据群聊比对结果确定第一群聊丢失消息。此处,第一群聊丢失消息既包括消息队列中第n条消息之前群聊消息缓存缺失的消息,也包括消息队列中第n条消息以及第n条消息之后的消息。然后再将第一群聊丢失消息写入本地丢失消息记录表中。
[0070]
若群聊比对结果为相等,则根据群聊消息缓存的最新消息确定第二群聊丢失消息。此处,第二群聊丢失消息仅包括消息队列中第n条消息之后的消息。然后再将第二群聊丢失消息写入本地丢失消息记录表中。
[0071]
本实施例通过消息队列与群聊消息缓存逐一比对,确定出群聊丢失消息。
[0072]
可选地,步骤s40,即所述定期检查所述本地丢失消息记录表是否包括所述丢失消息,包括:
[0073]
s401、获取本机的机器识别信息;
[0074]
s402、根据所述机器识别信息确定消息更新时间;
[0075]
s403、根据所述消息更新时间检查所述本地丢失消息记录表是否包括所述丢失消息。
[0076]
可理解地,在此处,机器识别信息可以是机器的mac码、ip地址等。不同的机器识别信息选取不同的消息更新时间。例如,mac码的尾数为奇数(若尾数为字母则根据字母的排序值,如a为1,b为2),则消息更新时间的分钟数设置为奇数(也可以设置为偶数);mac码的尾数为偶数,则消息更新时间的分钟数设置为偶数(也可以设置为奇数)。
[0077]
本实施例通过在不同的消息更新时间检查丢失消息,可以避免瞬时的网络请求过高的情况。
[0078]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0079]
在一实施例中,提供一种丢失消息补偿装置,该丢失消息补偿装置与上述实施例中丢失消息补偿方法一一对应。如图3所示,该丢失消息补偿装置包括定期检查模块40、获取更新消息模块50和更新消息模块60。各功能模块详细说明如下:
[0080]
定期检查模块40,用于定期检查本地丢失消息记录表是否包括丢失消息;
[0081]
获取更新消息模块50,用于若所述本地丢失消息记录表包含所述丢失消息,则向服务端获取与所述丢失消息匹配的更新消息;
[0082]
更新消息模块60,用于根据所述更新消息更新所述本地缓存消息。
[0083]
可选地,丢失消息补偿装置,还包括:
[0084]
生成队列获取请求模块,用于在检测到消息补偿的触发事件时,向服务端发送基于所述触发事件生成的消息队列获取请求;
[0085]
接收消息队列模块,用于接收服务端返回的用于响应所述消息队列获取请求的消息队列;
[0086]
查找丢失消息模块,用于根据所述消息队列检查本地缓存消息是否存在丢失消息,存在丢失消息时,将所述丢失消息的标识写入所述本地丢失消息记录表中。
[0087]
可选地,生成队列获取请求模块包括:
[0088]
获取最早消息单元,用于在所述触发事件为拉取指定会话id的历史消息时,获取处于会话窗口的最早消息;
[0089]
确定第一获取区间单元,用于根据所述最早消息确定第一队列获取区间;
[0090]
第一生成获取请求单元,用于根据所述第一队列获取区间生成所述消息队列获取请求。
[0091]
可选地,生成队列获取请求模块包括:
[0092]
确定第二获取区间单元,用于在所述触发事件为收到在先群通知时,根据所述在先群通知确定第二队列获取区间;
[0093]
第二生成获取请求单元,用于根据所述第二队列获取区间生成所述消息队列获取请求。
[0094]
可选的,查找丢失消息模块包括:
[0095]
个人比对单元,用于若本地缓存消息为个人消息缓存,则将消息队列的第一条消息与所述个人消息缓存的最新消息进行比对,生成个人比对结果;
[0096]
个人检查单元,用于若所述个人比对结果为不相等,则检查所述消息队列的连续性,生成个人检查结果;
[0097]
确定个人丢失消息单元,用于根据所述个人比对结果和所述个人检查结果确定个人丢失消息;
[0098]
第一写入记录表单元,用于将所述个人丢失消息写入本地丢失消息记录表中。
[0099]
可选的,查找丢失消息模块还包括:
[0100]
生成群聊比对结果单元,用于若本地缓存消息为群聊消息缓存,则将消息队列与所述群聊消息缓存进行比对,生成群聊比对结果;
[0101]
确定第一群聊丢失消息单元,用于若所述群聊比对结果为不相等,则根据所述群聊比对结果确定第一群聊丢失消息;
[0102]
确定第二群聊丢失消息单元,用于若所述群聊比对结果为相等,则根据所述群聊
消息缓存的最新消息确定第二群聊丢失消息;
[0103]
第二写入记录表单元,用于将所述第一群聊丢失消息或所述第二群聊丢失消息写入所述本地丢失消息记录表中。
[0104]
可选的,定期检查模块包括:
[0105]
获取识别信息单元,用于获取本机的机器识别信息;
[0106]
确定更新时间单元,用于根据所述机器识别信息确定消息更新时间;
[0107]
检查丢失消息单元,用于根据所述消息更新时间检查所述本地丢失消息记录表是否包括所述丢失消息。
[0108]
关于丢失消息补偿装置的具体限定可以参见上文中对于丢失消息补偿方法的限定,在此不再赘述。上述丢失消息补偿装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0109]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括可读存储介质、内存储器。该可读存储介质存储有操作系统、计算机可读指令和数据库。该内存储器为可读存储介质中的操作系统和计算机可读指令的运行提供环境。该计算机设备的数据库用于存储丢失消息补偿方法所涉及的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机可读指令被处理器执行时以实现一种丢失消息补偿方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
[0110]
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现以下步骤:
[0111]
定期检查本地丢失消息记录表是否包括丢失消息;
[0112]
若所述本地丢失消息记录表包含所述丢失消息,则向服务端获取与所述丢失消息匹配的更新消息;
[0113]
根据所述更新消息更新所述本地缓存消息。
[0114]
在一个实施例中,提供了一个或多个存储有计算机可读指令的计算机可读存储介质,本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。可读存储介质上存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时实现以下步骤:
[0115]
定期检查本地丢失消息记录表是否包括丢失消息;
[0116]
若所述本地丢失消息记录表包含所述丢失消息,则向服务端获取与所述丢失消息匹配的更新消息;
[0117]
根据所述更新消息更新所述本地缓存消息。
[0118]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述
各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0119]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0120]
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1