CN112118171A - 消息互通系统、方法、装置、计算机设备及可读存储介质 - Google Patents
消息互通系统、方法、装置、计算机设备及可读存储介质 Download PDFInfo
- Publication number
- CN112118171A CN112118171A CN202010921394.XA CN202010921394A CN112118171A CN 112118171 A CN112118171 A CN 112118171A CN 202010921394 A CN202010921394 A CN 202010921394A CN 112118171 A CN112118171 A CN 112118171A
- Authority
- CN
- China
- Prior art keywords
- message
- client
- target
- identifier
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/07—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail characterised by the inclusion of specific contents
- H04L51/18—Commands or executable codes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种消息互通系统、方法、装置、计算机设备及可读存储介质,涉及通讯技术领域,第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端,存储结构仅仅只有一张消息表,省去了分布式存储的大量工作,降低了系统的存储复杂性和运维难度,提高了消息互通系统的性能,实现了简单、轻量。所述系统应用于第一客户端、服务器和第二客户端,包括:第一客户端向服务器发送目标消息;服务器查询消息表中是否存储有目标消息;当服务器查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,存储至消息表;服务器向第一客户端返回发送成功回执;服务器向第二客户端发送第二消息反馈。
Description
技术领域
本申请涉及通讯技术领域,特别是涉及一种消息互通方法、装置、计算机设备及计算机可读存储介质。
背景技术
近年来,即时消息通信由于其使用快捷、功能强大、费用低廉、沟通方便等优点,成为人们最常使用的通信方式,人们通过即时通信工具,能够很方便的实现消息互通,传输各种语言、感情等信息。其中,在实现即时消息的互通时,消息发送方所持的终端中安装有即时通讯工具的客户端,客户端与互通消息服务器进行消息收发交互,将消息发送方想要发送的消息即时的传输给消息接收方所持的终端中。
相关技术中,互通消息服务器内部区分有发消息代理和收消息代理。发消息代理在接收到消息发送方传输的消息后,会将该消息存储在分布式数据库的多个存储节点中,生成存储序号,并在多个存储节点中大于预设书面的存储节点存储消息成功时,返回存储成功确认。随后,收消息代理根据最近一次拉取消息的存储序号,确定本次需要拉取消息的存储序号,从多个存储节点中拉取对应存储序号的消息,将该消息从多个存储节点中删除,并返回给消息接收方。
在相关技术中,申请人发现至少存在以下问题:
采用分布式数据库来存储消息带来了数据一致性的风险,因此,才会在存储消息时需要大于预设书面的存储节点存储消息成功时返回存储成功确认,并开展后续的流程,这就导致增加了整个消息互通流程的复杂性和运维难度,为了保存消息需要执行大量相同的工作,承载消息互通的系统的性能也被大大降低。
发明内容
有鉴于此,本申请提供了一种消息互通系统、方法、装置、计算机设备及可读存储介质,主要目的在于解决目前增加了整个消息互通流程的复杂性和运维难度,为了保存消息需要执行大量相同的工作,承载消息互通的系统的性能也被大大降低的问题。
依据本申请第一方面,提供了一种消息互通系统,该系统应用于第一客户端、服务器和第二客户端,包括:
第一客户端向服务器发送目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
第一客户端统计等待服务器返回发送成功回执的第一等待时长;
服务器接收第一客户端发送的目标消息,查询消息表中是否存储有目标消息;
当服务器查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表;
在目标消息存储成功后,服务器向第一客户端返回携带目标序号标识的发送成功回执;
第一客户端若在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识;
服务器向第二客户端标识指示的第二客户端发送第二消息反馈。
依据本申请第二方面,提供了一种消息互通方法,该方法应用于第一客户端,包括:
向服务器发送目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
统计等待服务器返回发送成功回执的第一等待时长,发送成功回执是由服务器接收并确定目标消息为新消息,将目标消息成功存储后返回的;
若在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
在另一个实施例中,统计等待服务器返回发送成功回执的第一等待时长之后,方法还包括:
若在第一等待时长达到时长阈值时未接收到发送成功回执,则向服务器发送携带第一客户端标识以及状态查询标识的第一心跳请求;
统计等待服务器返回第一心跳回执的第二等待时长,第一心跳回执是由服务器接收到第一心跳请求后生成并返回的;
如果在第二等待时长未达到时长阈值时接收到第一心跳回执,则重新向服务器发送目标信息。
在另一个实施例中,该方法还包括:
每隔预设时间间隔,向服务器发送携带第一客户端标识、第一最大序号标识以及消息查询标识的第二心跳请求;
接收服务器基于第二心跳请求返回的第一消息反馈;
当第一消息反馈指示有新消息时,向服务器发送携带第一客户端标识以及本地记录的第一最大序号标识的第一消息拉取请求,并接收服务器返回的待接收消息,待接收消息对应的序号标识大于第一最大序号标识。
在另一个实施例中,每隔预设时间间隔,向服务器发送携带第一客户端标识以及消息查询标识的第二心跳请求之后,方法还包括:
若在第三等待时长达到时长阈值时未接收到第一消息反馈,则向服务器发送携带第一客户端标识的会话连接建立请求,与服务器之间重新建立会话连接,第三等待时长是等待接收第一消息反馈的时长。
在另一个实施例中,该方法还包括:
获取目标账号,生成携带目标账号的历史消息拉取请求,历史消息拉取请求携带目标账号以及目标账号在本地对应的第二最大序号标识;
将历史消息拉取请求发送至服务器;
接收服务器返回的历史消息,历史消息由服务器根据目标账号以及第二最大序号标识确定。
依据本申请第三方面,提供了一种消息互通方法,该方法应用于服务器,包括:
接收第一客户端发送的目标消息,查询消息表中是否存储有目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
当查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表;
在目标消息存储成功后,向第一客户端返回携带目标序号标识的发送成功回执;
向第二客户端标识指示的第二客户端发送第二消息反馈。
在另一个实施例中,接收第一客户端发送的目标消息之前,方法还包括:
接收第一客户端发送的携带第一客户端标识的会话连接建立请求;
为第一客户端创建第一会话信息,将第一客户端的第一连接信息和第一连接状态保存至第一会话信息;
将第一客户端标识和第一会话信息作为第一键值对进行存储。
在另一个实施例中,在目标消息存储成功后,向第一客户端返回发送成功回执之后,方法还包括:
当接收到第二客户端发送的携带第二客户端标识和消息查询标识的第三心跳请求时,向第二客户端发送第三消息反馈;
接收第二客户端返回的第三消息拉取请求,在第三消息拉取请求中获取第三最大序号标识,第三最大序号标识是第二客户端本地记录的最大序号标识;
查询大于第三最大序号标识的指定序号标识,通过第二客户端标识对应的第二会话信息,将指定序号标识对应的指定消息发送至第二客户端。
在另一个实施例中,该方法还包括:
接收第一客户端发送的心跳请求;
当心跳请求携带消息查询标识时,获取心跳请求携带的第一最大序号标识,查询第一客户端标识是否对应待接收消息,待接收消息对应的序号标识大于第一最大序号标识;
若确定第一客户端标识存在对应的待接收消息,则基于心跳请求,向第一客户端返回指示有新消息的第一消息反馈,并接收第一客户端在接收到第一消息反馈后返回的携带第一客户端标识以及第一最大序号标识的第一消息拉取请求,通过第一客户端标识对应的第一会话信息,将待接收消息发送至第一客户端;
若确定第一客户端标识不存在对应的待接收消息,则基于心跳请求,向第一客户端返回指示暂无消息的第一消息反馈。
在另一个实施例中,该方法还包括:
统计当前与服务器成功建立会话连接的全部客户端中每个客户端的空闲时长,空闲时长是客户端与服务器之间未进行任何互通的时长;
当检测到目标客户端的空闲时长达到了空闲超时时长时,提取目标客户端对应的目标会话信息;
结束与目标客户端的会话,将目标会话信息删除,断开与目标客户端之间的会话连接。
在另一个实施例中,该方法还包括:
当接收到第一客户端发送的历史消息拉取请求时,在历史消息拉取请求中提取目标账号以及第二最大序号标识,第二最大序号标识是目标账号在第一客户端本地对应的最大序号标识;
若第二最大序号标识为非空值,则查询第一客户端标识对应的大于第二最大序号标识的消息作为历史消息,将历史消息发送至第一客户端;
若第二最大序号标识为空值,则查询第一客户端标识对应的全部的历史消息,将全部的历史消息发送至第一客户端。
依据本申请第四方面,提供了一种消息互通装置,该方法应用于第一客户端,包括:
第一发送模块,用于向服务器发送目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
统计模块,用于统计等待服务器返回发送成功回执的第一等待时长,发送成功回执是由服务器接收并确定目标消息为新消息,将目标消息成功存储后返回的;
更新模块,用于若在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
在另一个实施例中,第一发送模块,还用于若在第一等待时长达到时长阈值时未接收到发送成功回执,则向服务器发送携带第一客户端标识以及状态查询标识的第一心跳请求;
统计模块,还用于统计等待服务器返回第一心跳回执的第二等待时长,第一心跳回执是由服务器接收到第一心跳请求后生成并返回的;
第一发送模块,还用于如果在第二等待时长未达到时长阈值时接收到第一心跳回执,则重新向服务器发送目标信息。
在另一个实施例中,该装置还包括:
第二发送模块,用于每隔预设时间间隔,向服务器发送携带第一客户端标识、第一最大序号标识以及消息查询标识的第二心跳请求;
第一接收模块,用于接收服务器基于第二心跳请求返回的第一消息反馈;
第三发送模块,用于当第一消息反馈指示有新消息时,向服务器发送携带第一客户端标识以及本地记录的第一最大序号标识的第一消息拉取请求,并接收服务器返回的待接收消息,待接收消息对应的序号标识大于第一最大序号标识。
在另一个实施例中,第三发送模块,还用于若在第三等待时长达到时长阈值时未接收到第一消息反馈,则向服务器发送携带第一客户端标识的会话连接建立请求,与服务器之间重新建立会话连接,第三等待时长是等待接收第一消息反馈的时长。
在另一个实施例中,该装置还包括:
获取模块,用于获取目标账号,生成携带目标账号的历史消息拉取请求,历史消息拉取请求携带目标账号以及目标账号在本地对应的第二最大序号标识;
第四发送模块,用于将历史消息拉取请求发送至服务器;
第二接收模块,用于接收服务器返回的历史消息,历史消息由服务器根据目标账号以及第二最大序号标识确定。
依据本申请第五方面,提供了一种消息互通装置,该方法应用于服务器,包括:
第一接收模块,用于接收第一客户端发送的目标消息,查询消息表中是否存储有目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
存储模块,用于当查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表;
第一发送模块,用于在目标消息存储成功后,向第一客户端返回携带目标序号标识的发送成功回执;
第二发送模块,用于向第二客户端标识指示的第二客户端发送第二消息反馈。
在另一个实施例中,该装置还包括:
第二接收模块,用于接收第一客户端发送的携带第一客户端标识的会话连接建立请求;
创建模块,用于为第一客户端创建第一会话信息,将第一客户端的第一连接信息和第一连接状态保存至第一会话信息;
存储模块,还用于将第一客户端标识和第一会话信息作为第一键值对进行存储。
在另一个实施例中,该第二发送模块,还用于当接收到第二客户端发送的携带第二客户端标识和消息查询标识的第三心跳请求时,向第二客户端发送第三消息反馈;
第一接收模块,还用于接收第二客户端返回的第三消息拉取请求,在第三消息拉取请求中获取第三最大序号标识,第三最大序号标识是第二客户端本地记录的最大序号标识;
第二发送模块,还用于查询大于第三最大序号标识的指定序号标识,通过第二客户端标识对应的第二会话信息,将指定序号标识对应的指定消息发送至第二客户端。
在另一个实施例中,该装置还包括:
第一接收模块,还用于接收第一客户端发送的心跳请求;
查询模块,用于当心跳请求携带消息查询标识时,获取心跳请求携带的第一最大序号标识,查询第一客户端标识是否对应待接收消息,待接收消息对应的序号标识大于第一最大序号标识;
第一发送模块,还用于若确定第一客户端标识存在对应的待接收消息,则基于心跳请求,向第一客户端返回指示有新消息的第一消息反馈,并接收第一客户端在接收到第一消息反馈后返回的携带第一客户端标识以及第一最大序号标识的第一消息拉取请求,通过第一客户端标识对应的第一会话信息,将待接收消息发送至第一客户端;
第一发送模块,还用于若确定第一客户端标识不存在对应的待接收消息,则基于心跳请求,向第一客户端返回指示暂无消息的第一消息反馈。
在另一个实施例中,该装置还包括:
统计模块,用于统计当前与服务器成功建立会话连接的全部客户端中每个客户端的空闲时长,空闲时长是客户端与服务器之间未进行任何互通的时长;
第一提取模块,用于当检测到目标客户端的空闲时长达到了空闲超时时长时,提取目标客户端对应的目标会话信息;
结束模块,用于结束与目标客户端的会话,将目标会话信息删除,断开与目标客户端之间的会话连接。
在另一个实施例中,该第一接收模块,还用于当接收到第一客户端发送的历史消息拉取请求时,在历史消息拉取请求中提取目标账号以及第二最大序号标识,第二最大序号标识是目标账号在第一客户端本地对应的最大序号标识;
第一发送模块,还用于若第二最大序号标识为非空值,则查询第一客户端标识对应的大于第二最大序号标识的消息作为历史消息,将历史消息发送至第一客户端;
第一发送模块,还用于若第二最大序号标识为空值,则查询第一客户端标识对应的全部的历史消息,将全部的历史消息发送至第一客户端。
依据本申请第六方面,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述第一方面至第三方面的系统或方法的步骤。
依据本申请第七方面,提供了一种可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述第一方面至第三方面的系统或方法的步骤。
借由上述技术方案,本申请提供的一种消息互通系统、方法、装置、计算机设备及可读存储介质,本申请的第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端来拉取目标消息,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂性和运维难度,节省了大量重复的工作,提高了消息互通系统的性能,在满足基本的文本消息发送的需求下,还实现了简单、轻量。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1A示出了本申请实施例提供的一种消息互通方法流程示意图;
图1B示出了本申请实施例提供的一种消息互通方法流程示意图;
图1C示出了本申请实施例提供的一种消息互通方法的交互示意图;
图2A示出了本申请实施例提供的一种消息互通方法的交互示意图;
图2B示出了本申请实施例提供的一种消息互通方法的交互示意图;
图2C示出了本申请实施例提供的一种消息互通方法的交互示意图;
图3A示出了本申请实施例提供的一种消息互通装置的结构示意图;
图3B示出了本申请实施例提供的一种消息互通装置的结构示意图;
图3C示出了本申请实施例提供的一种消息互通装置的结构示意图;
图4A示出了本申请实施例提供的一种消息互通装置的结构示意图;
图4B示出了本申请实施例提供的一种消息互通装置的结构示意图;
图4C示出了本申请实施例提供的一种消息互通装置的结构示意图;
图4D示出了本申请实施例提供的一种消息互通装置的结构示意图;
图5示出了本申请实施例提供的一种计算机设备的装置结构示意图。
具体实施方式
下面将参照附图更详细地描述本申请的示例性实施例。虽然附图中显示了本申请的示例性实施例,然而应当理解,可以以各种形式实现本申请而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本申请,并且能够将本申请的范围完整的传达给本领域的技术人员。
本申请实施例提供了一种消息互通方法,如图1A所示,该方法应用于第一客户端,包括:
101、第一客户端向服务器发送目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识。
102、第一客户端统计等待服务器返回发送成功回执的第一等待时长,发送成功回执是由服务器接收并确定目标消息为新消息,将目标消息成功存储后返回的。
103、若第一客户端在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
本申请实施例提供的方法,第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端来拉取目标消息,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂性和运维难度,节省了大量重复的工作,提高了消息互通系统的性能,在满足基本的文本消息发送的需求下,还实现了简单、轻量。
本申请实施例提供了一种消息互通方法,如图1B所示,该方法应用于服务器,包括:
104、服务器接收第一客户端发送的目标消息,查询消息表中是否存储有目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识。
105、当服务器查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表。
106、服务器在目标消息存储成功后,向第一客户端返回携带目标序号标识的发送成功回执。
107、服务器向第二客户端标识指示的第二客户端发送第二消息反馈。
本申请实施例提供的方法,第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端来拉取目标消息,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂性和运维难度,节省了大量重复的工作,提高了消息互通系统的性能,在满足基本的文本消息发送的需求下,还实现了简单、轻量。
在对本申请进行详细的解释说明之前,先对本申请涉及的消息互通系统进行简单介绍:
消息互通系统应用于第一客户端、服务器以及第二客户端之间的交互。其中,服务器与大量客户端之间建立了会话连接,第一客户端和第二客户端是大量客户端中的任一客户端。在本申请实施例中,以第一客户端请求向第二客户端发送即时的消息为例进行说明,而在实际应用的过程中,第二客户端也可以按照本申请的流程向第一客户端或者其他客户端发送即时消息,本申请中的第一客户端和第二客户端只为一种举例说明。服务器用于实现第一客户端与第二客户端之间的消息互通,服务器中包括消息收发服务、消息交换存储服务以及Redis(一种键值数据库)。其中,消息收发服务用于存储客户端会话信息,向客户端发送消息反馈,接收客户端发送的消息拉取请求,进而为客户端拉取相应的消息进行返回。消息交换存储服务用于存储客户端之间进行互通的消息,并为消息收发服务提供消息拉取的功能。Redis作为消息总线用于收发服务监听消息提醒,当有最新消息发送给客户端时,消息交换存储服务会通过Redis来通知消息收发服务,进而通知客户端。
在实际应用的过程中,以第一客户端为消息的发送方,第二客户端为消息的接收方为例进行说明,则消息互通系统的工作流程如下:第一客户端向服务器发送目标消息,该目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识。之后,第一客户端会统计等待服务器返回发送成功回执的第一等待时长。服务器查询消息表中是否存储有目标消息,当服务器查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表,并在目标消息存储成功后,服务器向第一客户端返回携带目标序号标识的发送成功回执。另一方面,第一客户端若在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。而服务器会向第二客户端发送第二消息反馈。这样,第二客户端接收到服务器发送的第二消息反馈后,会向服务器返回携带第二客户端标识的第二消息拉取请求。服务器接收第二客户端返回的第二消息拉取请求,通过第二客户端对应的第二会话信息,将目标消息发送至第二客户端,以便第二客户端接收到该目标消息,实现第一客户端与第二客户端之间的消息互通。
具体地,综合服务器中的各种服务,上述消息互通的工作流程总结如下:参见图1C,第一客户端向服务器中的消息收发服务发送目标消息,消息收发服务将目标消息存储在消息交换存储服务中,为目标消息分配目标序号标识。检查第二客户端是否在线,如果第二客户端在线,则消息交换存储服务基于Redis发布实时的消息反馈,由消息收发服务将在消息交换存储服务中监听到的消息反馈发送给第二客户端,以便第二客户端向消息收发服务请求拉取消息,进而消息收发服务去到消息交换存储服务中拉取目标消息返回给第二客户端进行查看。同样,如果第二客户端向第一客户端发送消息,也是基于上述的过程实现的,因此,无论是第一客户端还是第二客户端,都可以与消息收发服务之间进行消息发送以及消息拉取的操作。
本申请实施例提供了一种消息互通方法,如图2A所示,该方法包括:
201、第一客户端向服务器发送目标消息,统计等待服务器返回发送成功回执的等待时长,若在等待时长未达到时长阈值时接收到发送成功回执,则执行下述步骤203。若在等待时长达到时长阈值时未接收到发送成功回执,则执行下述步骤204。
申请人认识到,目前在实现客户端与客户端之间的消息互通时,消息的存储是分布式的,多个存储节点均需要存储即将进行互通的消息,且只有存储节点中大于预设书面的存储节点存储该消息成功时,才会向客户端反馈发送成功的回执,后续如果需要拉取存储节点中存储的消息,还需要在完成消息的拉取后,将多个存储节点中的该消息都删除。这种分布式存储消息的方式带来了数据一致性的风险,所以才需要大于预设书面的存储节点存储该消息成功时才进行后续的处理,虽然给生产环境带来了可扩展性,但是增加了系统的复杂性和运维难度,也降低了系统的性能。而且,这种方式没有做服务器端的消息持久化操作,所有消息在接收方接收成功后,都会从服务器端的存储节点中删除,在实现不同客户端消息同步时比较困难。因此,本发明提出了一种消息互通的方法,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂度并且提高了性能,在满足基本的文本消息发送的需求下,尽量简单、轻量。另外,在具体的实现细节中,通过客户端的断线重连机制,保证了客户端与服务器之间会话连接的可靠性。进一步地,客户端基于去重以及心拉取最新消息的方式,保证了既不会有重复消息,也不会因为网络问题导致一次拉取失败从而无法获取最新消息的问题,充分保证了消息互通系统的健壮性。还有,本申请中的消息互通系统会把消息持久化到服务器,使得客户端中账号登录的时候,轻松实现消息的同步。
需要说明的是,为了实现与服务器之间的消息互通,无论是第一客户端还是第二客户端,都需要与服务器之间建立会话连接,该会话连接可以是websocket(一种网络协议)长连接,以第一客户端为例,建立会话连接的过程如下:第一客户端会发送携带第一客户端标识的会话连接建立请求给服务器,服务器接收第一客户端发送的携带第一客户端标识的会话连接建立请求后,为第一客户端创建第一会话信息,将第一客户端的第一连接信息和第一连接状态保存至第一会话信息,并将第一客户端标识和第一会话信息作为第一键值对进行存储,这样就完成了第一客户端与服务器之间的会话连接,后续服务器向第一客户端发送消息时,都会通过该第一会话信息实现。同样地,服务器也会与第二客户端之间建立会话连接,为第二客户端建立第二会话信息,并将第二客户端标识和第二会话信息作为第二键值对进行存储,此处不再进行赘述。参见图2B,服务器的消息收发服务中设置有大量的会话信息,也即图2B中的session(会话),通过会话信息,服务器与客户端之间实现请求、提醒、消息、回执等的互通,且服务器是可以同时与多个客户端之间进行互通的。
进一步地,在客户端和服务器之间的会话连接上会设置有空闲超时时长,该空闲超时时长存在的目的是为了解决在断网等异常情况下,客户端无法发送正常的关闭连接请求时,会导致会话连接发生无法关闭的情况,因此,在设置了空闲超时时长后,如果客户端和服务器在超出空闲超时时长内没有任何请求、提醒以及消息等的互通,则该客户端对应的会话信息会被销毁。也即服务器会统计当前与服务器成功建立会话连接的全部客户端中每个客户端的空闲时长,该空闲时长是客户端与服务器之间未进行任何互通的时长。当服务器检测到目标客户端的空闲时长达到了空闲超时时长时,提取目标客户端对应的目标会话信息,结束与目标客户端的会话,将目标会话信息删除,断开与目标客户端之间的会话连接。另外,由于客户端标识与会话信息作为键值对进行了存储,因此,在将目标会话信息删除后,目标会话信息与目标客户端的客户端标识组成的键值对也会被删除。
第一客户端在请求向第二客户端发送消息时,会向服务器发送目标消息,由服务器来进行目标消息的传输。该目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识,第一客户端标识可以是发送方的ID(Identity document,身份标识),例如,第一客户端中当前登录的账号,同样,第二客户端标识可以是接收方ID。消息内容是消息的主体,例如,一句话,或者一张图片等等。消息标识是消息的唯一标识ID,用于与其他海量的消息进行区分。
第一客户端在将目标消息发送至服务器后,为了避免目标消息的发送过程中发生任何错误导致的目标消息发送失败,从目标消息发出后,第一客户端会统计等待服务器返回发送成功回执的第一等待时长,若在第一等待时长未达到时长阈值时接收到发送成功回执,则第一客户端会确定该目标消息已经发送成功了,开始后续更新本地的消息状态的工作,也即执行下述步骤203。而若在第一等待时长达到时长阈值时未接收到发送成功回执,则第一客户端会确定该目标消息发送失败,需要触发重发机制重新进行目标消息的发送,也即执行下述步骤204。
202、服务器接收第一客户端发送的目标消息,查询消息表中是否存储有目标消息,当查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表,并在目标消息存储成功后,向第一客户端返回携带目标序号标识的发送成功回执。
在本申请实施例中,服务器接收到目标消息后,会查询消息表中是否存储了该目标消息,如果存储有该目标消息,则代表该目标消息并不是新的消息,无需再次对该目标消息进行存储。而如果未存储有该目标消息,则代表该目标消息为新消息,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,并将标记后的目标消息存储至消息表。其中,消息表可以通过MySQL(关系型数据库管理系统)存储,这样,结果会包括用来存储消息的message_info(消息表),以及用来存储不同客户端当前本地最大消息序号标识的message_client_sync(消息代理同步),从而实现多客户端的消息拉取操作。
服务器成功存储目标消息后,会向第一客户端返回携带目标序号标识的发送成功回执,用发送成功回执来告知第一客户端当前服务器已经成功接收并存储了目标消息。其中,该发送成功回执具体由服务器中的消息收发服务发送给第一客户端。
203、若第一客户端在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
在本申请实施例中,若第一客户端在第一等待时长未达到时长阈值时接收到发送成功回执,则第一客户端会确定该目标消息已经发送成功了,开始后续更新本地的消息状态的工作,因此,第一客户端基于发送成功回执,对本地消息状态进行更新。此处的更新通常是第一客户端通知用户已经发送成功,并记录下当前最近一次发送成功的消息,也即第一客户端将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识,以便后续如果发生了消息缺失,可以重新向服务器请求获取消息。
204、若第一客户端在第一等待时长达到时长阈值时未接收到发送成功回执,则重新向服务器发送目标信息。
在本申请实施例中,若在第一等待时长达到时长阈值时未接收到发送成功回执,则第一客户端会确定该目标消息发送失败,需要触发重发机制重新进行目标消息的发送。
而重新发送目标消息的前提是第一客户端与服务器之间的会话连接是健康且存在的,因此,第一客户端向服务器发送携带第一客户端标识以及状态查询标识的第一心跳请求,并统计等待服务器返回第一心跳回执的第二等待时长,第一心跳回执是由服务器接收到第一心跳请求后生成并返回的。如果在第二等待时长未达到时长阈值时第一客户端接收到第一心跳回执,则表示第一客户端与服务器之间的会话连接是健康且存在的,因此,第一客户端重新向服务器发送目标信息,也即重新执行步骤201中的过程,重新统计第一等待时长,且服务器也会在成功存储目标信息后,向第一客户端返回发送成功回执。而另一方面,如果在第二等待时长达到时长阈值时第一客户端未接收到第一心跳回执,则表示第一客户端与服务器之间的会话连接断开了,需要重新建立会话连接,因此,第一客户端向服务器发送携带第一客户端标识的会话连接建立请求,与服务器之间重新建立会话连接,也即重新执行上述步骤201中建立第一会话连接的过程,并在成功建立第一会话连接后,再重新发送目标信息,直至接收到服务器返回的发送成功回执。
205、服务器向第二客户端标识指示的第二客户端发送第二消息反馈。
在本申请实施例中,服务器向第二客户端标识指示的第二客户端发送第二消息反馈,以便告知第二客户端来服务器中拉取目标消息。需要说明的是,如果第二客户端不在线,是不能向第二客户端发送即时消息的,需要转变成离线消息进行发送,因此,服务器实际上会通过检测第二客户端对应的第二会话信息是否存在来确定第二客户端标识指示的第二客户端是否在线。而当服务器检测到第二客户端标识指示的第二客户端在线时,向第二客户端发送第二消息反馈,以便告知第二客户端来服务器中拉取目标消息。而当检测到第二客户端标识指示的第二客户端离线时,由于已经将目标消息存储,因此,结束当前流程即可,后续第二客户端上线时会向服务器发送心跳请求,届时服务器再告知第二客户端存在未查看的消息即可,具体的参见图2B心跳请求的接收以及反馈可由消息收发服务实现。
另外,需要说明的是,如果第一客户端发送的目标消息明确指示是离线消息,则服务器可以直接将目标消息进行存储,向第一客户端返回发送成功回执,并结束当前流程,无需向第二客户端发送第二消息反馈。后续,第二客户端上线时会向服务器发送心跳请求,届时服务器再告知第二客户端存在未查看的消息即可,而无需执行检测第二客户端是否在线的操作。
206、第二客户端接收服务器发送的第二消息反馈,向服务器返回携带第二客户端标识的第二消息拉取请求。
在本申请实施例中,第二客户端接收服务器发送的第二消息反馈,并向服务器返回携带第二客户端标识的第二消息拉取请求,以便告知服务器,当前正在请求拉取指示发给第二客户端标识指示的第二客户端的目标消息。
207、服务器接收第二客户端返回的第二消息拉取请求,通过第二客户端对应的第二会话信息,将目标消息发送至第二客户端。
在本申请实施例中,服务器将第二消息反馈发送给第二客户端后,会接收到第二客户端返回的第二消息拉取请求,表示第二客户端请求获取消息,这样,服务器会通过第二客户端对应的第二会话信息,将目标消息发送至第二客户端。
208、第二客户端接收服务器返回的目标消息。
在本申请实施例中,第二客户端接收服务器到返回的目标消息后,后续针对目标消息执行相应的展示、提醒等工作即可,至此便实现了第一客户端与第二客户端之间的消息互通。
而在实际应用的过程中,为了保证消息互通系统的健壮性,在本申请的消息互通系统中,设置有心跳机制,每个与服务器之间建立了网络连接的客户端都会持续向服务器发送心跳请求,通过该心跳请求,不仅能够维持与服务器之间的网络连接的存活,而且还能获取到暂时没能查看的消息。以第一客户端向服务器发送第一心跳请求为例进行说明,具体过程参见图2C,包括:
209、第一客户端每隔预设时间间隔,向服务器发送携带第一客户端标识、第一最大序号标识以及消息查询标识的第二心跳请求。
在本申请实施例中,第一客户端每隔预设时间间隔,向服务器发送携带第一客户端标识、第一最大序号标识以及消息查询标识的第二心跳请求,以第二心跳请求告知服务器当前第一客户端正在正常运行中。
其中,预设时间间隔一般小于上述步骤201中提及的空闲超时时长的二分之一,比如,空闲超时时长为30秒,则预设时间间隔可在15秒以下的任意取值,本申请对预设时间间隔的取值不进行限定。
210、服务器接收第一客户端发送的第二心跳请求,当检测到第二心跳请求中携带消息查询标识时,服务器获取第二心跳请求携带的第一最大序号标识,查询第一客户端标识是否对应待接收消息。若确定第一客户端标识存在对应的待接收消息,则执行下述步骤211至步骤214。若确定第一客户端标识不存在对应的待接收消息,则执行下述步骤215。
在本申请实施例中,当服务器接收到第一客户端发送的第二心跳请求时,会获取心跳请求携带的第一最大序号标识,查询第一客户端标识是否对应待接收消息,其中,待接收消息对应的序号标识大于第一最大序号标识。若确定第一客户端标识存在对应的待接收消息,则服务器提醒第一客户端有消息没有查看,也即执行下述步骤211至步骤214。而若定第一客户端标识不存在对应的待接收消息,则表示暂时没有发给第一客户端的消息未被查看,提醒第一客户端没有消息未查看,也即执行下述步骤215。
211、若确定第一客户端标识存在对应的待接收消息,则服务器基于第二心跳请求,向第一客户端返回指示有新消息的第一消息反馈。
在本申请实施例中,若确定第一客户端标识存在对应的待接收消息,则服务器需要提醒第一客户端有消息没有查看,因此,服务器基于第二心跳请求,向第一客户端返回指示有新消息的第一消息反馈,以第一消息反馈告知第一客户端当前存在尚未接收的消息。
212、第一客户端接收服务器基于第二心跳请求返回的指示有新消息的第一消息反馈,向服务器发送携带第一客户端标识以及第一最大序号标识的第一消息拉取请求。
在本申请实施例中,第一客户端接收服务器基于第二心跳请求反馈的第一消息反馈后,会向服务器发送携带第一客户端标识以及第一最大序号标识的第一消息拉取请求,以便告知服务器将第一客户端没有接收到的消息传回来。
213、服务器接收第一客户端在接收到第一消息反馈后返回的携带第一客户端标识以及第一最大序号标识的第一消息拉取请求,通过第一客户端标识对应的第一会话信息,将待接收消息发送至第一客户端。
在本申请实施例中,服务器接收到第一客户端在接收到第一消息反馈后返回的携带第一客户端标识的第一消息拉取请求后,会通过第一客户端标识对应的第一会话信息,将待接收消息发送至第一客户端,以供第一客户端查看。其中,待接收消息是服务器基于第一客户端标识以及第一最大序号标识确定的,也就是说序号标识大于第一最大序号标识,且携带有第一客户端标识的消息都可以作为待接收消息发送给第一客户端。
214、第一客户端接收服务器返回的待接收消息。
在本申请实施例中,第一客户端接收到服务器返回的待接收消息,继续基于待接收消息执行后续的工作即可。
215、若确定第一客户端标识不存在对应的待接收消息,则服务器基于第二心跳请求,向第一客户端返回指示暂无消息的第一消息反馈。
在本申请实施例中,若确定第一客户端标识不存在对应的待接收消息,则表示暂时没有发给第一客户端的消息未被接收,因此,服务器基于第二心跳请求,向第一客户端返回指示暂无消息的第一消息反馈,告知第一客户端没有消息未接收,并继续保持工作状态。
另外,考虑到有时会有新的账号在客户端中登录,因此,本申请还支持账号相关的历史消息的拉取。当有目标账号在第一客户端或者第二客户端登录时,第一客户端或第二客户端会拉取有关该目标账号的历史消息,以便用户参考,下面以目标账号在第一客户端中登录为例进行说明。当第一客户端检测目标账号成功登录时,第一客户端会获取目标账号,生成携带目标账号的历史消息拉取请求,将历史消息拉取请求发送至服务器,历史消息拉取请求携带目标账号以及目标账号在本地对应的第二最大序号标识。需要说明的是,由于第一客户端中可能曾经存储有目标账号的相关消息,或者没有存储过,会使目标账号在本地对应的第二最大序号标识可能存在取值也可能不存在取值,因此,在本申请实施例中,第二最大序号标识可以是非空值或者空值,非空值也即表示第一客户端本地曾经存储有目标账号的相关消息,而空值也即表示第一客户端本地没有存储有目标账号的相关信息。这样,当服务器接收到第一客户端发送的历史消息拉取请求时,会在历史消息拉取请求中提取目标账号以及第二最大序号标识,第二最大序号标识是目标账号在第一客户端本地对应的最大序号标识。之后,若第二最大序号标识为非空值,则服务器会查询第一客户端标识对应的大于第二最大序号标识的消息作为历史消息,将历史消息发送至第一客户端,使得第一客户端接收服务器返回的历史消息。而若第二最大序号标识为空值,则服务器会查询第一客户端标识对应的全部的历史消息,将历史消息发送至第一客户端。例如,假设B账号之前基于B客户端登录,B账号接收到的消息都保存在B客户端的本地,如果B账号在C客户端上成功登录,则C客户端会登录B账号,生成携带B账号的历史消息拉取请求发送给服务器,由服务器拉取历史消息返回给C客户端进行展示。
本申请实施例提供的方法,第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端来拉取目标消息,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂性和运维难度,节省了大量重复的工作,提高了消息互通系统的性能,在满足基本的文本消息发送的需求下,还实现了简单、轻量。
进一步地,作为图1A所述方法的具体实现,本申请实施例提供了一种消息互通装置,如图3A所示,所述装置包括:第一发送模块301,统计模块302和更新模块303。
该第一发送模块301,用于向服务器发送目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
该统计模块302,用于统计等待服务器返回发送成功回执的第一等待时长,发送成功回执是由服务器接收并确定目标消息为新消息,将目标消息成功存储后返回的;
该更新模块303,用于若在第一等待时长未达到时长阈值时接收到发送成功回执,则将发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
在具体的应用场景中,该第一发送模块301,还用于若在第一等待时长达到时长阈值时未接收到发送成功回执,则向服务器发送携带第一客户端标识以及状态查询标识的第一心跳请求;
该统计模块302,还用于统计等待服务器返回第一心跳回执的第二等待时长,第一心跳回执是由服务器接收到第一心跳请求后生成并返回的;
该第一发送模块301,还用于如果在第二等待时长未达到时长阈值时接收到第一心跳回执,则重新向服务器发送目标信息。
在具体的应用场景中,如图3B所示,该装置还包括:第二发送模块304,第一接收模块305和第三发送模块306。
该第二发送模块304,用于每隔预设时间间隔,向服务器发送携带第一客户端标识、第一最大序号标识以及消息查询标识的第二心跳请求;
该第一接收模块305,用于接收服务器基于第二心跳请求返回的第一消息反馈
该第三发送模块306,用于当第一消息反馈指示有新消息时,向服务器发送携带第一客户端标识以及本地记录的第一最大序号标识的第一消息拉取请求,并接收服务器返回的待接收消息,待接收消息对应的序号标识大于第一最大序号标识。
在具体的应用场景中,该第三发送模块306,还用于若在第三等待时长达到时长阈值时未接收到第一消息反馈,则向服务器发送携带第一客户端标识的会话连接建立请求,与服务器之间重新建立会话连接,第三等待时长是等待接收第一消息反馈的时长。
在具体的应用场景中,参见图3C,该装置还包括:获取模块307,第四发送模块308和第二接收模块309。
该获取模块307,用于获取目标账号,生成携带目标账号的历史消息拉取请求,历史消息拉取请求携带目标账号以及目标账号在本地对应的第二最大序号标识;
该第四发送模块308,用于将历史消息拉取请求发送至服务器;
该第二接收模块309,用于接收服务器返回的历史消息,历史消息由服务器根据目标账号以及第二最大序号标识确定。
本申请实施例提供的装置,第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端来拉取目标消息,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂性和运维难度,节省了大量重复的工作,提高了消息互通系统的性能,在满足基本的文本消息发送的需求下,还实现了简单、轻量。
进一步地,作为图1B所述方法的具体实现,本申请实施例提供了一种消息互通装置,如图4A所示,所述装置包括:第一接收模块401,存储模块402,第一发送模块403和第二发送模块404。
该第一接收模块401,用于接收第一客户端发送的目标消息,查询消息表中是否存储有目标消息,目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
该存储模块402,用于当查询确定消息表中未存储目标消息时,为目标消息分配目标序号标识,采用目标序号标识对目标消息进行标记,将标记后的目标消息存储至消息表;
该第一发送模块403,用于在目标消息存储成功后,向第一客户端返回携带目标序号标识的发送成功回执;
该第二发送模块404,用于向第二客户端标识指示的第二客户端发送第二消息反馈。
在具体的应用场景中,参见图4B,该装置还包括:第二接收模块405和创建模块406。
该第二接收模块405,用于接收第一客户端发送的携带第一客户端标识的会话连接建立请求;
该创建模块406,还用于为第一客户端创建第一会话信息,将第一客户端的第一连接信息和第一连接状态保存至第一会话信息;
该存储模块402,还用于将第一客户端标识和第一会话信息作为第一键值对进行存储。
在具体的应用场景中,该第二发送模块404,还用于当接收到所述第二客户端发送的携带所述第二客户端标识和消息查询标识的第三心跳请求时,向所述第二客户端发送所述第三消息反馈;
该第一接收模块401,还用于接收所述第二客户端返回的第三消息拉取请求,在所述第三消息拉取请求中获取第三最大序号标识,所述第三最大序号标识是所述第二客户端本地记录的最大序号标识;
该第二发送模块404,还用于查询大于所述第三最大序号标识的指定序号标识,通过所述第二客户端标识对应的第二会话信息,将所述指定序号标识对应的指定消息发送至所述第二客户端。
在具体的应用场景中,参见图4C,该装置还包括:查询模块407。
该第一接收模块401,还用于接收所述第一客户端发送的心跳请求;
该查询模块407,用于当所述心跳请求携带消息查询标识时,获取所述心跳请求携带的第一最大序号标识,查询所述第一客户端标识是否对应待接收消息,所述待接收消息对应的序号标识大于所述第一最大序号标识;
该第一发送模块403,还用于若确定所述第一客户端标识存在对应的所述待接收消息,则基于所述心跳请求,向所述第一客户端返回指示有新消息的第一消息反馈,并接收所述第一客户端在接收到所述第一消息反馈后返回的携带所述第一客户端标识以及所述第一最大序号标识的第一消息拉取请求,通过所述第一客户端标识对应的第一会话信息,将所述待接收消息发送至所述第一客户端;
该第一发送模块403,还用于若确定所述第一客户端标识不存在对应的所述待接收消息,则基于所述心跳请求,向所述第一客户端返回指示暂无消息的所述第一消息反馈。
在具体的应用场景中,参见图4D,该装置还包括:统计模块408,第一提取模块409和结束模块410。
该统计模块408,用于统计当前与所述服务器成功建立会话连接的全部客户端中每个客户端的空闲时长,所述空闲时长是所述客户端与所述服务器之间未进行任何互通的时长;
该第一提取模块409,用于当检测到目标客户端的空闲时长达到了空闲超时时长时,提取所述目标客户端对应的目标会话信息;
该结束模块410,用于结束与所述目标客户端的会话,将所述目标会话信息删除,断开与所述目标客户端之间的会话连接。
在具体的应用场景中,该第一接收模块401,还用于当接收到所述第一客户端发送的历史消息拉取请求时,在所述历史消息拉取请求中提取目标账号以及第二最大序号标识,所述第二最大序号标识是所述目标账号在所述第一客户端本地对应的最大序号标识;
该第一发送模块403,还用于若所述第二最大序号标识为非空值,则查询所述第一客户端标识对应的大于所述第二最大序号标识的消息作为历史消息,将所述历史消息发送至所述第一客户端;
该第一发送模块403,还用于若所述第二最大序号标识为空值,则查询所述第一客户端标识对应的全部的历史消息,将所述全部的历史消息发送至所述第一客户端。
本申请实施例提供的装置,第一客户端向服务器发送目标消息,服务器在成功存储目标消息后会立即返回发送成功回执,并提醒第二客户端来拉取目标消息,存储结构仅仅只有一张消息表,并且通过单机或者主从的方式存储,省去了分布式存储里需要保证数据一致性而做的大量工作,大大降低了系统的存储复杂性和运维难度,节省了大量重复的工作,提高了消息互通系统的性能,在满足基本的文本消息发送的需求下,还实现了简单、轻量。
需要说明的是,本申请实施例提供的一种消息互通装置所涉及各功能单元的其他相应描述,可以参考图1A至图1B和图2A中的对应描述,在此不再赘述。
在示例性实施例中,参见图5,还提供了一种设备,该设备500包括通信总线、处理器、存储器和通信接口,还可以包括、输入输出接口和显示设备,其中,各个功能单元之间可以通过总线完成相互间的通信。该存储器存储有计算机程序,处理器,用于执行存储器上所存放的程序,执行上述实施例中的消息互通方法。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的消息互通方法的步骤。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
Claims (16)
1.一种消息互通系统,其特征在于,所述系统应用于第一客户端、服务器和第二客户端,包括:
所述第一客户端向所述服务器发送目标消息,所述目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
所述第一客户端统计等待所述服务器返回发送成功回执的第一等待时长;
所述服务器接收第一客户端发送的所述目标消息,查询消息表中是否存储有所述目标消息;
当所述服务器查询确定所述消息表中未存储所述目标消息时,为所述目标消息分配目标序号标识,采用所述目标序号标识对所述目标消息进行标记,将标记后的所述目标消息存储至消息表;
在所述目标消息存储成功后,所述服务器向所述第一客户端返回携带所述目标序号标识的所述发送成功回执;
所述第一客户端若在所述第一等待时长未达到时长阈值时接收到所述发送成功回执,则将所述发送成功回执携带的所述目标序号标识更新为本地记录的第一最大序号标识;
所述服务器向所述第二客户端标识指示的第二客户端发送第二消息反馈。
2.一种消息互通方法,其特征在于,所述方法应用于第一客户端,包括:
向服务器发送目标消息,所述目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
统计等待所述服务器返回发送成功回执的第一等待时长,所述发送成功回执是由所述服务器接收并确定所述目标消息为新消息,将所述目标消息成功存储后返回的;
若在所述第一等待时长未达到时长阈值时接收到所述发送成功回执,则将所述发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
3.根据权利要求2所述的方法,其特征在于,所述统计等待所述服务器返回发送成功回执的第一等待时长之后,所述方法还包括:
若在所述第一等待时长达到所述时长阈值时未接收到所述发送成功回执,则向所述服务器发送携带所述第一客户端标识以及状态查询标识的第一心跳请求;
统计等待所述服务器返回第一心跳回执的第二等待时长,所述第一心跳回执是由所述服务器接收到所述第一心跳请求后生成并返回的;
如果在所述第二等待时长未达到所述时长阈值时接收到所述第一心跳回执,则重新向所述服务器发送所述目标信息。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
每隔预设时间间隔,向所述服务器发送携带所述第一客户端标识、所述第一最大序号标识以及消息查询标识的第二心跳请求;
接收所述服务器基于所述第二心跳请求返回的第一消息反馈;
当所述第一消息反馈指示有新消息时,向所述服务器发送携带所述第一客户端标识以及本地记录的所述第一最大序号标识的第一消息拉取请求,并接收所述服务器返回的待接收消息,所述待接收消息对应的序号标识大于所述第一最大序号标识。
5.根据权利要求4所述的方法,其特征在于,所述每隔预设时间间隔,向所述服务器发送携带所述第一客户端标识以及消息查询标识的第二心跳请求之后,所述方法还包括:
若在第三等待时长达到所述时长阈值时未接收到所述第一消息反馈,则向所述服务器发送携带所述第一客户端标识的会话连接建立请求,与所述服务器之间重新建立会话连接,所述第三等待时长是等待接收所述第一消息反馈的时长。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取目标账号,生成携带所述目标账号的历史消息拉取请求,所述历史消息拉取请求携带所述目标账号以及所述目标账号在本地对应的第二最大序号标识;
将所述历史消息拉取请求发送至所述服务器;
接收所述服务器返回的历史消息,所述历史消息由所述服务器根据所述目标账号以及所述第二最大序号标识确定。
7.一种消息互通方法,其特征在于,所述方法应用于服务器,包括:
接收第一客户端发送的目标消息,查询消息表中是否存储有所述目标消息,所述目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
当查询确定所述消息表中未存储所述目标消息时,为所述目标消息分配目标序号标识,采用所述目标序号标识对所述目标消息进行标记,将标记后的所述目标消息存储至消息表;
在所述目标消息存储成功后,向所述第一客户端返回携带所述目标序号标识的发送成功回执;
向所述第二客户端标识指示的第二客户端发送第二消息反馈。
8.根据权利要求7所述的方法,其特征在于,所述接收第一客户端发送的目标消息之前,所述方法还包括:
接收所述第一客户端发送的携带所述第一客户端标识的会话连接建立请求;
为所述第一客户端创建第一会话信息,将所述第一客户端的第一连接信息和第一连接状态保存至所述第一会话信息;
将所述第一客户端标识和所述第一会话信息作为第一键值对进行存储。
9.根据权利要求7所述的方法,其特征在于,所述在所述目标消息存储成功后,向所述第一客户端返回发送成功回执之后,所述方法还包括:
当接收到所述第二客户端发送的携带所述第二客户端标识和消息查询标识的第三心跳请求时,向所述第二客户端发送所述第三消息反馈;
接收所述第二客户端返回的第三消息拉取请求,在所述第三消息拉取请求中获取第三最大序号标识,所述第三最大序号标识是所述第二客户端本地记录的最大序号标识;
查询大于所述第三最大序号标识的指定序号标识,通过所述第二客户端标识对应的第二会话信息,将所述指定序号标识对应的指定消息发送至所述第二客户端。
10.根据权利要求7所述的方法,其特征在于,所述方法还包括:
接收所述第一客户端发送的心跳请求;
当所述心跳请求携带消息查询标识时,获取所述心跳请求携带的第一最大序号标识,查询所述第一客户端标识是否对应待接收消息,所述待接收消息对应的序号标识大于所述第一最大序号标识;
若确定所述第一客户端标识存在对应的所述待接收消息,则基于所述心跳请求,向所述第一客户端返回指示有新消息的第一消息反馈,并接收所述第一客户端在接收到所述第一消息反馈后返回的携带所述第一客户端标识以及所述第一最大序号标识的第一消息拉取请求,通过所述第一客户端标识对应的第一会话信息,将所述待接收消息发送至所述第一客户端;
若确定所述第一客户端标识不存在对应的所述待接收消息,则基于所述心跳请求,向所述第一客户端返回指示暂无消息的所述第一消息反馈。
11.根据权利要求7所述的方法,其特征在于,所述方法还包括:
统计当前与所述服务器成功建立会话连接的全部客户端中每个客户端的空闲时长,所述空闲时长是所述客户端与所述服务器之间未进行任何互通的时长;
当检测到目标客户端的空闲时长达到了空闲超时时长时,提取所述目标客户端对应的目标会话信息;
结束与所述目标客户端的会话,将所述目标会话信息删除,断开与所述目标客户端之间的会话连接。
12.根据权利要求7所述的方法,其特征在于,所述方法还包括:
当接收到所述第一客户端发送的历史消息拉取请求时,在所述历史消息拉取请求中提取目标账号以及第二最大序号标识,所述第二最大序号标识是所述目标账号在所述第一客户端本地对应的最大序号标识;
若所述第二最大序号标识为非空值,则查询所述第一客户端标识对应的大于所述第二最大序号标识的消息作为历史消息,将所述历史消息发送至所述第一客户端;
若所述第二最大序号标识为空值,则查询所述第一客户端标识对应的全部的历史消息,将所述全部的历史消息发送至所述第一客户端。
13.一种消息互通装置,其特征在于,所述方法应用于第一客户端,包括:
第一发送模块,用于向服务器发送目标消息,所述目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
统计模块,用于统计等待所述服务器返回发送成功回执的第一等待时长,所述发送成功回执是由所述服务器接收并确定所述目标消息为新消息,将所述目标消息成功存储后返回的;
更新模块,用于若在所述第一等待时长未达到时长阈值时接收到所述发送成功回执,则将所述发送成功回执携带的目标序号标识更新为本地记录的第一最大序号标识。
14.一种消息互通装置,其特征在于,所述方法应用于服务器,包括:
第一接收模块,用于接收第一客户端发送的目标消息,查询消息表中是否存储有所述目标消息,所述目标消息至少包括第一客户端标识、第二客户端标识、消息内容以及消息标识;
存储模块,用于当查询确定所述消息表中未存储所述目标消息时,为所述目标消息分配目标序号标识,采用所述目标序号标识对所述目标消息进行标记,将标记后的所述目标消息存储至消息表;
第一发送模块,用于在所述目标消息存储成功后,向所述第一客户端返回携带所述目标序号标识的发送成功回执;
第二发送模块,用于向所述第二客户端标识指示的第二客户端发送第二消息反馈。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至12中任一项所述系统或方法的步骤。
16.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的系统或方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010921394.XA CN112118171A (zh) | 2020-09-04 | 2020-09-04 | 消息互通系统、方法、装置、计算机设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010921394.XA CN112118171A (zh) | 2020-09-04 | 2020-09-04 | 消息互通系统、方法、装置、计算机设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112118171A true CN112118171A (zh) | 2020-12-22 |
Family
ID=73802207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010921394.XA Pending CN112118171A (zh) | 2020-09-04 | 2020-09-04 | 消息互通系统、方法、装置、计算机设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112118171A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527496A (zh) * | 2020-10-29 | 2021-03-19 | 百果园技术(新加坡)有限公司 | 序号分配服务系统、序号分配方法、服务器及存储介质 |
CN113242172A (zh) * | 2021-04-26 | 2021-08-10 | 福建天泉教育科技有限公司 | 一种消息的应答方法及系统 |
CN113282176A (zh) * | 2021-06-15 | 2021-08-20 | 华帝股份有限公司 | 智能家电的控制方法、装置、计算机设备及可读存储介质 |
CN113923176A (zh) * | 2021-09-30 | 2022-01-11 | 完美世界(北京)软件科技发展有限公司 | 即时通讯的消息撤回方法、装置、设备及计算机可读介质 |
CN114553806A (zh) * | 2022-02-21 | 2022-05-27 | 平安国际智慧城市科技股份有限公司 | 一种即时通讯的优化方法、装置、设备及存储介质 |
CN115567472A (zh) * | 2022-09-29 | 2023-01-03 | 北京二六三企业通信有限公司 | 消息传输方法、装置、服务端及存储介质 |
CN118175601A (zh) * | 2024-05-14 | 2024-06-11 | 东北大学 | 一种基于Lora与消息队列技术的车队通讯方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546465A (zh) * | 2011-12-22 | 2012-07-04 | 苏州阔地网络科技有限公司 | 一种清除失效连接的方法及装置 |
CN104079431A (zh) * | 2014-06-20 | 2014-10-01 | 用友软件股份有限公司 | 即时通信的会话管理方法和会话管理装置 |
CN104796871A (zh) * | 2015-04-30 | 2015-07-22 | 努比亚技术有限公司 | 即时消息业务的处理方法、装置及系统 |
CN106921554A (zh) * | 2015-12-24 | 2017-07-04 | 北京新媒传信科技有限公司 | 消息传输方法及装置 |
CN107491356A (zh) * | 2017-08-28 | 2017-12-19 | 广州市百果园信息技术有限公司 | 基于序号的消息处理方法、终端设备和服务器 |
CN107508916A (zh) * | 2017-09-27 | 2017-12-22 | 深圳狗尾草智能科技有限公司 | 用于智能机器人的服务器链接管理方法 |
CN108631955A (zh) * | 2018-05-15 | 2018-10-09 | 网易(杭州)网络有限公司 | 一种确保消息发送可达的方法、系统和装置 |
CN108667899A (zh) * | 2018-03-29 | 2018-10-16 | 挂号网(杭州)科技有限公司 | 多终端消息同步和隔离即时通讯方法及系统 |
CN110191193A (zh) * | 2019-06-12 | 2019-08-30 | 广州吱呀网络科技有限公司 | 一种终端消息同步方法、装置和移动终端 |
-
2020
- 2020-09-04 CN CN202010921394.XA patent/CN112118171A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546465A (zh) * | 2011-12-22 | 2012-07-04 | 苏州阔地网络科技有限公司 | 一种清除失效连接的方法及装置 |
CN104079431A (zh) * | 2014-06-20 | 2014-10-01 | 用友软件股份有限公司 | 即时通信的会话管理方法和会话管理装置 |
CN104796871A (zh) * | 2015-04-30 | 2015-07-22 | 努比亚技术有限公司 | 即时消息业务的处理方法、装置及系统 |
CN106921554A (zh) * | 2015-12-24 | 2017-07-04 | 北京新媒传信科技有限公司 | 消息传输方法及装置 |
CN107491356A (zh) * | 2017-08-28 | 2017-12-19 | 广州市百果园信息技术有限公司 | 基于序号的消息处理方法、终端设备和服务器 |
CN107508916A (zh) * | 2017-09-27 | 2017-12-22 | 深圳狗尾草智能科技有限公司 | 用于智能机器人的服务器链接管理方法 |
CN108667899A (zh) * | 2018-03-29 | 2018-10-16 | 挂号网(杭州)科技有限公司 | 多终端消息同步和隔离即时通讯方法及系统 |
CN108631955A (zh) * | 2018-05-15 | 2018-10-09 | 网易(杭州)网络有限公司 | 一种确保消息发送可达的方法、系统和装置 |
CN110191193A (zh) * | 2019-06-12 | 2019-08-30 | 广州吱呀网络科技有限公司 | 一种终端消息同步方法、装置和移动终端 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527496A (zh) * | 2020-10-29 | 2021-03-19 | 百果园技术(新加坡)有限公司 | 序号分配服务系统、序号分配方法、服务器及存储介质 |
CN112527496B (zh) * | 2020-10-29 | 2024-05-28 | 百果园技术(新加坡)有限公司 | 序号分配服务系统、序号分配方法、服务器及存储介质 |
CN113242172A (zh) * | 2021-04-26 | 2021-08-10 | 福建天泉教育科技有限公司 | 一种消息的应答方法及系统 |
CN113242172B (zh) * | 2021-04-26 | 2023-02-28 | 福建天泉教育科技有限公司 | 一种消息的应答方法及系统 |
CN113282176A (zh) * | 2021-06-15 | 2021-08-20 | 华帝股份有限公司 | 智能家电的控制方法、装置、计算机设备及可读存储介质 |
CN113282176B (zh) * | 2021-06-15 | 2024-03-26 | 华帝股份有限公司 | 智能家电的控制方法、装置、计算机设备及可读存储介质 |
CN113923176A (zh) * | 2021-09-30 | 2022-01-11 | 完美世界(北京)软件科技发展有限公司 | 即时通讯的消息撤回方法、装置、设备及计算机可读介质 |
CN114553806A (zh) * | 2022-02-21 | 2022-05-27 | 平安国际智慧城市科技股份有限公司 | 一种即时通讯的优化方法、装置、设备及存储介质 |
CN114553806B (zh) * | 2022-02-21 | 2023-09-05 | 深圳平安智慧医健科技有限公司 | 一种即时通讯的优化方法、装置、设备及存储介质 |
CN115567472A (zh) * | 2022-09-29 | 2023-01-03 | 北京二六三企业通信有限公司 | 消息传输方法、装置、服务端及存储介质 |
CN118175601A (zh) * | 2024-05-14 | 2024-06-11 | 东北大学 | 一种基于Lora与消息队列技术的车队通讯方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112118171A (zh) | 消息互通系统、方法、装置、计算机设备及可读存储介质 | |
JP4771744B2 (ja) | Impsクライアントの状態情報同期化方法 | |
CN109561159B (zh) | 一种基于Websocket长连接的数据处理方法及系统 | |
CN111431790B (zh) | 一种即时通讯方法、装置、系统及存储介质 | |
US20090177743A1 (en) | Device, Method and Computer Program Product for Cluster Based Conferencing | |
CN113630465B (zh) | 消息处理方法、装置、设备以及存储介质 | |
CN110391974A (zh) | 一种消息同步方法、服务端、终端及系统 | |
CN113391979A (zh) | 监控数据展示的处理方法、设备、系统及存储介质 | |
CN103259715A (zh) | 一种管理多人会话的方法、装置及系统 | |
CN112152914A (zh) | 一种基于北斗短报文的即时通信方法以及系统 | |
CN106941461A (zh) | 一种利用消息队列优化服务器处理请求的方法 | |
CN107508916B (zh) | 用于智能机器人的服务器链接管理方法 | |
CN106789913B (zh) | 用户账号管理方法及装置 | |
CN116319732A (zh) | 一种基于RabbitMQ的消息队列集中配置管理系统及方法 | |
CN103516766A (zh) | 一种客户端与应用服务器间进行通信的方法和系统 | |
CN105281940B (zh) | 一种基于netconf协议的hello报文交互的方法、设备和系统 | |
CN107786607B (zh) | 一种消息重传方法、消息重传服务器及用户设备 | |
KR100837434B1 (ko) | 클라이언트와 서버 간의 인터페이스를 수행하는 매개장치및 그의 인터페이스방법 | |
CN113794622B (zh) | 消息处理方法、装置、电子设备及存储介质 | |
CN102780570A (zh) | 一种云计算设备管理的实现方法及系统 | |
CN114125021B (zh) | 一种基于Netty消息驱动的终端信息发布系统 | |
WO2019023972A1 (zh) | 多终端消息同步方法、系统、服务器和计算机处理设备 | |
CN111064674A (zh) | 数据的传输方法及装置、系统 | |
CN109391656B (zh) | 一种设备管理会话的恢复方法、装置、客户端及服务器 | |
CN115361442B (zh) | 一种消息推送方法及装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201222 |