消息同步方法、装置、电子设备及可读存储介质与流程

    专利2022-07-07  135


    本发明涉及数据处理领域,尤其涉及一种消息同步方法、装置、电子设备及可读存储介质。



    背景技术:

    随着互联网技术的发展,即时通讯的应用越加广泛,例如,人们利用微信、qq或钉钉等软件作为日常工作、生活中的交流工具,随着用户量的增加,产生的消息量越加庞大,如何将消息同步到对应的客户端呢?

    当前通常通过读扩散或写扩散的方式进行消息同步。读扩散同步时,消息的入库存储只需要写一次,然而客户端需要对每个会话都拉取一次才能获取全部消息,读被大大放大;写扩散同步时,消息需要同步到每个客户端的订阅列表(若一个会话有n个参与者,则消息需要写n次)。这两种同步方式都导致消息同步效率低下。因此,亟需一种消息同步方法,以提高消息同步效率。



    技术实现要素:

    鉴于以上内容,有必要提供一种消息同步方法,旨在提高消息同步效率。

    本发明提供的消息同步方法,包括:

    接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码;

    基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码;

    每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码;

    实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    可选的,第三数据库中存储有各个客户端用户对应的公钥,所述消息头还包括会话消息的标准信息摘要值密文及发送方id,在基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中之前,所述方法还包括:

    对各个会话消息进行合法性验证;

    所述对各个会话消息进行合法性验证,包括:

    选择一个会话消息,计算选择的会话消息的信息摘要值;

    基于所述选择的会话消息的发送方id获取所述发送方对应的第一公钥,用所述第一公钥解密所述选择的会话消息的标准信息摘要值密文,得到解密后的标准信息摘要值;

    当计算得到的信息摘要值与所述解密后的标准信息摘要值一致时,判断所述选择的会话消息合法。

    可选的,在得到解密后的标准信息摘要值之后,所述方法还包括:

    若计算得到的信息摘要值与所述解密后的标准信息摘要值不一致,则判断所述选择的会话消息不合法,将所述选择的会话消息丢弃。

    可选的,在将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端之前,所述方法还包括:

    获取所述指定客户端对应的第二公钥,用所述第二公钥加密所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的每条消息。

    可选的,在每隔第二时间之前,所述方法还包括:

    计算所述指定客户端用户所参与的各个会话在第三时间段内新增消息的平均时间间隔,将所述平均时间间隔作为所述第二时间。

    可选的,所述方法还包括:

    响应用户基于目标客户端发出的消息同步请求,将同步类型选择界面展示到所述目标客户端界面,若用户基于所述选择界面选择全量同步,则将该用户所参与的所有会话的会话id展示到所述目标客户端界面,基于用户选择的会话id将对应的消息序列同步到所述目标客户端;

    若用户基于所述选择界面选择增量同步,则将该用户所参与的所有会话的会话id及同步时间起点输入框展示到所述目标客户端界面,基于用户选择的同步时间起点确定用户选择的会话id的消息序列中待同步的起始消息的第四编码,将所述用户选择的会话id的消息序列中以第四编码为起点的所有消息同步到所述目标客户端。

    为了解决上述问题,本发明还提供一种消息同步装置,所述装置包括:

    编码模块,用于接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码;

    建立模块,用于基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码;

    更新模块,用于每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码;

    推送模块,用于实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    可选的,所述推送模块还用于:

    计算所述指定客户端用户所参与的各个会话在第三时间段内新增消息的平均时间间隔,将所述平均时间间隔作为所述第二时间。

    为了解决上述问题,本发明还提供一种电子设备,所述电子设备包括:

    至少一个处理器;以及,

    与所述至少一个处理器通信连接的存储器;其中,

    所述存储器存储有可被所述至少一个处理器执行的消息同步程序,所述消息同步程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述消息同步方法。

    为了解决上述问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有消息同步程序,所述消息同步程序可被一个或者多个处理器执行,以实现上述消息同步方法。

    相较现有技术,本发明首先基于会话id及消息发送时间将各个会话消息存储至各个会话对应的消息序列中,本步骤保证了各个消息序列中的消息是连续的、完整的;接着,基于成员id为每个用户建立会话集合,会话集合包括用户所参与的各个会话的待同步消息队列及推送记录表,推送记录表包括各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码,本步骤建立用户级别的会话集合,使得基于用户的消息同步的实现逻辑更为简单;然后,每隔第一时间,将各个会话的消息序列中新增的消息存储至待同步消息队列中,并更新第一编码及第二编码,得到新的第一编码及新的第二编码;最后,当判断需要向指定客户端推送消息时,将指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给指定客户端,本步骤使得推送操作更为简单,提高了同步效率。因此,本发明提高了消息同步效率。

    附图说明

    图1为本发明一实施例提供的消息同步方法的流程示意图;

    图2为本发明一实施例提供的消息同步装置的模块示意图;

    图3为本发明一实施例提供的实现消息同步方法的电子设备的结构示意图;

    本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

    具体实施方式

    为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

    需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

    本发明提供一种消息同步方法。参照图1所示,为本发明一实施例提供的消息同步方法的流程示意图。该方法可以由一个电子设备执行,该电子设备可以由软件和/或硬件实现。

    本实施例中,消息同步方法包括:

    s1、接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码。

    本实施例提供的消息同步方法应用于电子设备,所述电子设备可以是即时通讯软件的后台服务器,所述第一数据库用于存储所有的会话消息,当接收到客户端基于该即时通讯软件发送的会话消息时,依据会话消息携带的会话id将各个会话消息存储至各个会话对应的消息序列中,并依据会话消息携带的发送时间为消息序列中的每条信息编码(例如,会话a对应的消息序列中第一条消息的编码可以是a-1,第二条消息的编码可以是a-2),从而可保证每个会话对应的消息序列中的消息是连续的、完整的。

    本实施例中,第三数据库中存储有各个客户端用户对应的公钥,所述消息头还包括会话消息的标准信息摘要值密文及发送方id,在基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中之前,所述方法还包括:

    对各个会话消息进行合法性验证;

    所述对各个会话消息进行合法性验证,包括:

    a11、选择一个会话消息,计算选择的会话消息的信息摘要值;

    a12、基于所述选择的会话消息的发送方id获取所述发送方对应的第一公钥,用所述第一公钥解密所述选择的会话消息的标准信息摘要值密文,得到解密后的标准信息摘要值;

    a13、当计算得到的信息摘要值与所述解密后的标准信息摘要值一致时,判断所述选择的会话消息合法。

    在得到解密后的标准信息摘要值之后,所述方法还包括:

    若计算得到的信息摘要值与所述解密后的标准信息摘要值不一致,则判断所述选择的会话消息不合法,将所述选择的会话消息丢弃。

    本实施例中,所述信息摘要值为md5值,各个客户端在发送会话消息时,将标准信息摘要值用自己的私钥加密,保证了标准信息摘要值密文的安全性,通过比对计算得到的信息摘要值与解密后的标准信息摘要值是否一致,杜绝了会话消息被篡改的可能性。

    s2、基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码。

    本实施例中,因第一数据库需要存储所有接收到的会话消息,随着消息量的增加,将消息同步到客户端的压力会越来越大,从而导致消息同步效率低下,为了解决这个问题,本实施例增加了第二数据库,第二数据库用于存储需要同步到客户端的会话消息,此时,第一数据库仅用于存储所有的会话消息,第二数据库仅用于存储需要同步的会话消息,从而保证了两个数据库的正常运行。

    本实施例中,第二数据库中建立了每个用户对应的会话集合,所述会话集合中包括该用户所参与的所有的会话对应的待同步消息队列及推送记录表,所述推送记录表记录了各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送给客户端的最后一条消息的第三编码。

    本步骤建立用户级别的会话集合,使得基于用户的消息同步的实现逻辑更为简单。

    s3、每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码。

    所述第一时间可以是1秒,例如,用户1对应的推送记录表中记录了:会话a对应的消息序列中最后一条信息的第一编码是a-50,会话a对应的待同步消息队列中最后一条信息的第二编码为a-30,则说明会话a中的第31条-第50条消息还未更新到待同步消息队列,此时可将第31条-第50条消息更新到待同步消息队列,并更新推送记录表中会话a的第一编码和第二编码。

    s4、实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    所述第二时间可以是3秒,例如,用户1的推送记录表中记录了:会话a的第三编码为a-0(初始值),新的第二编码为a-50,则说明需要向用户1的客户端推送会话a的第1~50条消息,当消息推送完成后,将推送记录表中会话a的第三编码更新为a-50。

    本实施例中,在将会话a的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端之后,可以将会话a的待同步消息队列中的消息清空,也可以保留预设数量(例如,200条)的最新消息。

    本实施例中,在将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端之前,所述方法还包括:

    获取所述指定客户端对应的第二公钥,用所述第二公钥加密所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的每条消息。

    指定客户端用户接收到客户端推送的消息后,可用自己的私钥解密每条信息,且每条消息的消息头中还包括标准信息摘要值,指定客户端用户可通过比对计算得到的信息摘要值与标准信息摘要值是否一致来判断每条信息的合法性。同时还可根据各个会话对应的消息的编码是否连续或重叠来判断消息同步是否有遗漏或重复。

    在本发明的另一个实施例中,在每隔第二时间之前,所述方法还包括:

    计算所述指定客户端用户所参与的各个会话在第三时间段(例如,最近一小时)内新增消息的平均时间间隔,将所述平均时间间隔作为所述第二时间。

    本步骤可为不同活跃度的用户设置不同的消息推送时间间隔,充分保证了消息推送的及时性,同时避免了为不活跃用户频繁推送消息所造成的资源浪费。

    本实施例中,所述方法还包括:

    b11、响应用户基于目标客户端发出的消息同步请求,将同步类型选择界面展示到所述目标客户端界面,若用户基于所述选择界面选择全量同步,则将该用户所参与的所有会话的会话id展示到所述目标客户端界面,基于用户选择的会话id将对应的消息序列同步到所述目标客户端;

    b12、若用户基于所述选择界面选择增量同步,则将该用户所参与的所有会话的会话id及同步时间起点输入框展示到所述目标客户端界面,基于用户选择的同步时间起点确定用户选择的会话id的消息序列中待同步的起始消息的第四编码,将所述用户选择的会话id的消息序列中以第四编码为起点的所有消息同步到所述目标客户端。

    当客户端用户需要同步信息时,可选择全量同步或增量同步。当选择增量同步时,可判断待同步消息队列中是否存在第四编码的消息,若存在,将待同步消息队列中以第四编码为起点的所有消息同步到所述客户端;若不存在,将消息序列中以第四编码为起点的所有消息同步到所述客户端。

    由上述实施例可知,本发明提出的消息同步方法,首先,基于会话id及消息发送时间将各个会话消息存储至各个会话对应的消息序列中,本步骤保证了各个消息序列中的消息是连续的、完整的;接着,基于成员id为每个用户建立会话集合,会话集合包括用户所参与的各个会话的待同步消息队列及推送记录表,推送记录表包括各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码,本步骤建立用户级别的会话集合,使得基于用户的消息同步的实现逻辑更为简单;然后,每隔第一时间,将各个会话的消息序列中新增的消息存储至待同步消息队列中,并更新第一编码及第二编码,得到新的第一编码及新的第二编码;最后,当判断需要向指定客户端推送消息时,将指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给指定客户端,本步骤使得推送操作更为简单,提高了同步效率。因此,本发明提高了消息同步效率。

    如图2所示,为本发明一实施例提供的消息同步装置的模块示意图。

    本发明所述消息同步装置100可以安装于电子设备中。根据实现的功能,所述消息同步装置100可以包括编码模块110、建立模块120、更新模块130及推送模块140。本发明所述模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。

    在本实施例中,关于各模块/单元的功能如下:

    编码模块110,用于接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码。

    所述第一数据库用于存储所有的会话消息,当接收到客户端基于该即时通讯软件发送的会话消息时,依据会话消息携带的会话id将各个会话消息存储至各个会话对应的消息序列中,并依据会话消息携带的发送时间为消息序列中的每条信息编码(例如,会话a对应的消息序列中第一条消息的编码可以是a-1,第二条消息的编码可以是a-2),从而可保证每个会话对应的消息序列中的消息是连续的、完整的。

    本实施例中,第三数据库中存储有各个客户端用户对应的公钥,所述消息头还包括会话消息的标准信息摘要值密文及发送方id,在基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中之前,所述编码模块110还用于:

    对各个会话消息进行合法性验证;

    所述对各个会话消息进行合法性验证,包括:

    a21、选择一个会话消息,计算选择的会话消息的信息摘要值;

    a22、基于所述选择的会话消息的发送方id获取所述发送方对应的第一公钥,用所述第一公钥解密所述选择的会话消息的标准信息摘要值密文,得到解密后的标准信息摘要值;

    a23、当计算得到的信息摘要值与所述解密后的标准信息摘要值一致时,判断所述选择的会话消息合法。

    在得到解密后的标准信息摘要值之后,所述编码模块110还用于:

    若计算得到的信息摘要值与所述解密后的标准信息摘要值不一致,则判断所述选择的会话消息不合法,将所述选择的会话消息丢弃。

    本实施例中,所述信息摘要值为md5值,各个客户端在发送会话消息时,将标准信息摘要值用自己的私钥加密,保证了标准信息摘要值密文的安全性,通过比对计算得到的信息摘要值与解密后的标准信息摘要值是否一致,杜绝了会话消息被篡改的可能性。

    建立模块120,用于基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码。

    本实施例中,因第一数据库需要存储所有接收到的会话消息,随着消息量的增加,将消息同步到客户端的压力会越来越大,从而导致消息同步效率低下,为了解决这个问题,本实施例增加了第二数据库,第二数据库用于存储需要同步到客户端的会话消息,此时,第一数据库仅用于存储所有的会话消息,第二数据库仅用于存储需要同步的会话消息,从而保证了两个数据库的正常运行。

    本实施例中,第二数据库中建立了每个用户对应的会话集合,所述会话集合中包括该用户所参与的所有的会话对应的待同步消息队列及推送记录表,所述推送记录表记录了各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送给客户端的最后一条消息的第三编码。

    本实施例通过建立模块120建立用户级别的会话集合,使得基于用户的消息同步的实现逻辑更为简单。

    更新模块130,用于每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码。

    所述第一时间可以是1秒,例如,用户1对应的推送记录表中记录了:会话a对应的消息序列中最后一条信息的第一编码是a-50,会话a对应的待同步消息队列中最后一条信息的第二编码为a-30,则说明会话a中的第31条-第50条消息还未更新到待同步消息队列,此时可将第31条-第50条消息更新到待同步消息队列,并更新推送记录表中会话a的第一编码和第二编码。

    推送模块140,用于实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    所述第二时间可以是3秒,例如,用户1的推送记录表中记录了:会话a的第三编码为a-0(初始值),新的第二编码为a-50,则说明需要向用户1的客户端推送会话a的第1~50条消息,当消息推送完成后,将推送记录表中会话a的第三编码更新为a-50。

    本实施例中,在将会话a的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端之后,可以将会话a的待同步消息队列中的消息清空,也可以保留预设数量(例如,200条)的最新消息。

    本实施例中,在将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端之前,所述推送模块140还用于:

    获取所述指定客户端对应的第二公钥,用所述第二公钥加密所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的每条消息。

    指定客户端用户接收到客户端推送的消息后,可用自己的私钥解密每条信息,且每条消息的消息头中还包括标准信息摘要值,指定客户端用户可通过比对计算得到的信息摘要值与标准信息摘要值是否一致来判断每条信息的合法性。同时还可根据各个会话对应的消息的编码是否连续或重叠来判断消息同步是否有遗漏或重复。

    在本发明的另一个实施例中,所述推送模块140还用于:

    计算所述指定客户端用户所参与的各个会话在第三时间段(例如,最近一小时)内新增消息的平均时间间隔,将所述平均时间间隔作为所述第二时间。

    此操作可为不同活跃度的用户设置不同的消息推送时间间隔,充分保证了消息推送的及时性,同时避免了为不活跃用户频繁推送消息所造成的资源浪费。

    本实施例中,所述推送模块140还用于:

    b21、响应用户基于目标客户端发出的消息同步请求,将同步类型选择界面展示到所述目标客户端界面,若用户基于所述选择界面选择全量同步,则将该用户所参与的所有会话的会话id展示到所述目标客户端界面,基于用户选择的会话id将对应的消息序列同步到所述目标客户端;

    b22、若用户基于所述选择界面选择增量同步,则将该用户所参与的所有会话的会话id及同步时间起点输入框展示到所述目标客户端界面,基于用户选择的同步时间起点确定用户选择的会话id的消息序列中待同步的起始消息的第四编码,将所述用户选择的会话id的消息序列中以第四编码为起点的所有消息同步到所述目标客户端。

    当客户端用户需要同步信息时,可选择全量同步或增量同步。当选择增量同步时,可判断待同步消息队列中是否存在第四编码的消息,若存在,将待同步消息队列中以第四编码为起点的所有消息同步到所述客户端;若不存在,将消息序列中以第四编码为起点的所有消息同步到所述客户端。

    如图3所示,为本发明一实施例提供的实现消息同步方法的电子设备的结构示意图。

    所述电子设备1是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。所述电子设备1可以是计算机、也可以是单个网络服务器、多个网络服务器组成的服务器组或者基于云计算的由大量主机或者网络服务器构成的云,其中云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。

    在本实施例中,电子设备1包括,但不仅限于,可通过系统总线相互通信连接的存储器11、处理器12、网络接口13,该存储器11中存储有消息同步程序10,所述消息同步程序10可被所述处理器12执行。图3仅示出了具有组件11-13以及消息同步程序10的电子设备1,本领域技术人员可以理解的是,图3示出的结构并不构成对电子设备1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。

    其中,存储器11包括内存及至少一种类型的可读存储介质。内存为电子设备1的运行提供缓存;可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等的非易失性存储介质。在一些实施例中,可读存储介质可以是电子设备1的内部存储单元,例如该电子设备1的硬盘;在另一些实施例中,该非易失性存储介质也可以是电子设备1的外部存储设备,例如电子设备1上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。本实施例中,存储器11的可读存储介质通常用于存储安装于电子设备1的操作系统和各类应用软件,例如存储本发明一实施例中的消息同步程序10的代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。

    处理器12在一些实施例中可以是中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子设备1的总体操作,例如执行与其他设备进行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行消息同步程序10等。

    网络接口13可包括无线网络接口或有线网络接口,该网络接口13用于在所述电子设备1与客户端(图中未画出)之间建立通信连接。

    可选的,所述电子设备1还可以包括用户接口,用户接口可以包括显示器(display)、输入单元比如键盘(keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选的,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的用户界面。

    应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。

    所述电子设备1中的所述存储器11存储的消息同步程序10是多个指令的组合,在所述处理器12中运行时,可以实现:

    接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码;

    基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码;

    每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码;

    实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    具体地,所述处理器12对上述消息同步程序10的具体实现方法可参考图1对应实施例中相关步骤的描述,在此不赘述。需要强调的是,为进一步保证上述会话消息的私密和安全性,上述会话消息还可以存储于一区块链的节点中。

    进一步地,所述电子设备1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。所述计算机可读介质可以是非易失性的,也可以是非易失性的。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)。

    所述计算机可读存储介质上存储有消息同步程序10,所述消息同步程序10可被一个或者多个处理器执行,本发明计算机可读存储介质具体实施方式与上述消息同步方法各实施例基本相同,在此不作赘述。

    在本发明所提供的几个实施例中,应该理解到,所揭露的设备,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

    所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

    另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。

    对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。

    因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。

    本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

    此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第二等词语用来表示名称,而并不表示任何特定的顺序。

    最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。


    技术特征:

    1.一种消息同步方法,其特征在于,所述方法包括:

    接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码;

    基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码;

    每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码;

    实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    2.如权利要求1所述的消息同步方法,其特征在于,第三数据库中存储有各个客户端用户对应的公钥,所述消息头还包括会话消息的标准信息摘要值密文及发送方id,在基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中之前,所述方法还包括:

    对各个会话消息进行合法性验证;

    所述对各个会话消息进行合法性验证,包括:

    选择一个会话消息,计算选择的会话消息的信息摘要值;

    基于所述选择的会话消息的发送方id获取所述发送方对应的第一公钥,用所述第一公钥解密所述选择的会话消息的标准信息摘要值密文,得到解密后的标准信息摘要值;

    当计算得到的信息摘要值与所述解密后的标准信息摘要值一致时,判断所述选择的会话消息合法。

    3.如权利要求2所述的消息同步方法,其特征在于,在得到解密后的标准信息摘要值之后,所述方法还包括:

    若计算得到的信息摘要值与所述解密后的标准信息摘要值不一致,则判断所述选择的会话消息不合法,将所述选择的会话消息丢弃。

    4.如权利要求1所述的消息同步方法,其特征在于,在将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端之前,所述方法还包括:

    获取所述指定客户端对应的第二公钥,用所述第二公钥加密所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的每条消息。

    5.如权利要求1所述的消息同步方法,其特征在于,在每隔第二时间之前,所述方法还包括:

    计算所述指定客户端用户所参与的各个会话在第三时间段内新增消息的平均时间间隔,将所述平均时间间隔作为所述第二时间。

    6.如权利要求1所述的消息同步方法,其特征在于,所述方法还包括:

    响应用户基于目标客户端发出的消息同步请求,将同步类型选择界面展示到所述目标客户端界面,若用户基于所述选择界面选择全量同步,则将该用户所参与的所有会话的会话id展示到所述目标客户端界面,基于用户选择的会话id将对应的消息序列同步到所述目标客户端;

    若用户基于所述选择界面选择增量同步,则将该用户所参与的所有会话的会话id及同步时间起点输入框展示到所述目标客户端界面,基于用户选择的同步时间起点确定用户选择的会话id的消息序列中待同步的起始消息的第四编码,将所述用户选择的会话id的消息序列中以第四编码为起点的所有消息同步到所述目标客户端。

    7.一种消息同步装置,其特征在于,所述装置包括:

    编码模块,用于接收各个客户端发送的会话消息,所述会话消息包括消息头和消息内容,所述消息头包括会话id、参与会话的成员id及消息发送时间,基于所述会话id及消息发送时间将各个会话消息存储至第一数据库中各个会话对应的消息序列中,并为各个消息序列中的每条信息编码;

    建立模块,用于基于所述成员id在第二数据库中为每个用户建立对应的会话集合,所述会话集合包括对应的用户所参与的各个会话的待同步消息队列及推送记录表,所述推送记录表包括对应的用户参与的各个会话的消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码;

    更新模块,用于每隔第一时间,基于所述第一编码及第二编码将各个会话的消息序列中新增的消息存储至各个会话的待同步消息队列中,并更新所述第一编码及第二编码,得到新的第一编码及新的第二编码;

    推送模块,用于实时监控各个客户端的在线和/或离线状态,当某一指定客户端在线时,每隔第二时间,判断是否需要向所述指定客户端推送消息,当判断需要推送时,将所述指定客户端对应的各个会话的待同步消息队列中第三编码与新的第二编码之间的消息推送给所述指定客户端,并在所述指定客户端对应的推送记录表中更新第三编码,得到新的第三编码。

    8.如权利要求7所述的消息同步装置,其特征在于,所述推送模块还用于:

    计算所述指定客户端用户所参与的各个会话在第三时间段内新增消息的平均时间间隔,将所述平均时间间隔作为所述第二时间。

    9.一种电子设备,其特征在于,所述电子设备包括:

    至少一个处理器;以及,

    与所述至少一个处理器通信连接的存储器;其中,

    所述存储器存储有可被所述至少一个处理器执行的消息同步程序,所述消息同步程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至6中任一项所述的消息同步方法。

    10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有消息同步程序,所述消息同步程序可被一个或者多个处理器执行,以实现如权利要求1至6任一项所述的消息同步方法。

    技术总结
    本发明涉及数据处理,揭露一种消息同步方法,包括:将各个会话消息存储至各个会话对应的消息序列中;为每个用户建立对应的会话集合,会话集合包括待同步消息队列及推送记录表,推送记录表包括消息序列中最后一条消息的第一编码、待同步消息队列中最后一条消息的第二编码及已推送的最后一条消息的第三编码;每隔第一时间,将新增的消息存储至各个待同步消息队列中,得到新的第一编码及新的第二编码;当判断需要推送时,将指定客户端对应的各个待同步消息队列中第三编码与新的第二编码之间的消息推送给指定客户端。本发明还提供一种消息同步装置、电子设备及可读存储介质。本发明提高了消息同步效率。

    技术研发人员:胡晓军;王亚雄;李智广;彭涛;龙喜洋;高宏
    受保护的技术使用者:招商局金融科技有限公司
    技术研发日:2020.12.14
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-7326.html

    最新回复(0)