一种基于redis的即时消息通讯方法和系统与流程

文档序号:11589991阅读:370来源:国知局
一种基于redis的即时消息通讯方法和系统与流程

本发明属于通信技术领域,尤其涉及一种基于redis的即时消息通讯方法和系统。



背景技术:

在在线客服系统中,最核心的业务包括即时消息通讯,传统的在线客服系统均采用单个服务器进行部署,即时消息通讯程序存储在单个服务器的jvm内存中,存在如下缺陷:单个服务器出现宕机时整个即时消息通讯业务将中断,处理即时消息通讯的系统稳定性差;且当需要处理的即时消息数据量非常庞大时,单个服务器无法满足要求,单个服务器的处理能力差,即时消息的发送速度和接收速度缓慢,用户体验度差;即时消息通讯程序均存储在单个服务器内,无法单独部署即时消息通讯。



技术实现要素:

本发明所要解决的技术问题是针对现有技术的不足,提供一种基于redis的即时消息通讯方法和系统。

本发明解决上述技术问题的技术方案如下:一种基于redis的即时消息通讯方法,包括如下步骤:

s1,根据访客端发送的通讯请求创建会话,并根据所述会话创建客服列表、访客列表和哈希实体;

s2,接收访客端或客服端其中一端发送的即时消息,根据即时消息生成消息id和即时信息,消息id与即时信息相对应,将所述消息id插入另一端对应的列表中,将即时信息插入哈希实体中;

s3,接收另一端发送的读取请求,根据读取请求从所述另一端对应的列表中获取消息id,根据消息id从哈希实体中获取所述即时信息并发送给另一端,删除所述消息id和即时信息。

本发明的有益效果是:通过创建会话,并根据会话创建客服列表、访客列表和哈希实体,将根据发送的即时消息生成的消息id插入列表中,将根据发送的即时消息生成的即时信息插入哈希实体中,实现根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,从而在接收者要读取即时信息时根据消息id获取即时信息并发送给接收者,实现提升即时消息通讯业务处理的稳定性和性能,提高用户体验度,能够单独部署即时消息通讯。

在上述技术方案的基础上,本发明还可以做如下改进:

进一步,所述s2步骤包括:

s21,接收访客端或客服端其中一端发送的至少一条即时消息;

s22,根据至少一条即时消息生成至少一条消息id和至少一条即时信息,所述至少一条消息id中的一条消息id与至少一条即时信息中的一条即时信息相对应;

s23,按照接收至少一条即时消息的顺序将所述至少一条消息id中的每条消息id依次插入另一端对应的列表中,将所述至少一条即时信息插入哈希实体中。

进一步,所述s3步骤包括:

s31,接收另一端发送的读取请求;

s32,根据所述读取请求从所述另一端对应的列表中获取一个消息id;

s33,根据所述一个消息id从哈希实体中获取与所述一个消息id对应的一个即时信息并发送给另一端;

s34,从所述另一端对应的列表中删除所述一个消息id,并从哈希实体中删除与所述一个消息id对应的一个即时信息。

进一步,所述即时信息包括:发送者、即时消息、即时消息的发送时间和即时消息类型。

进一步,当访客端为所述一端时,另一端为客服端,且另一端对应的列表为客服列表;当客服端为所述一端时,另一端为访客端,且另一端对应的列表为访客列表。

本发明解决上述技术问题的技术方案如下:一种基于redis的即时消息通讯系统,包括:

创建模块,用于根据访客端发送的通讯请求创建会话,并根据所述会话创建客服列表、访客列表和哈希实体;

插入模块,用于接收访客端或客服端其中一端发送的即时消息,根据即时消息生成消息id和即时信息,消息id与即时信息相对应,将所述消息id插入另一端对应的列表中,将即时信息插入哈希实体中;

取出模块,用于接收另一端发送的读取请求,根据读取请求从所述另一端对应的列表中获取消息id,根据消息id从哈希实体中获取所述即时信息并发送给另一端,删除所述消息id和即时信息。

本发明的有益效果是:通过创建会话,并根据会话创建客服列表、访客列表和哈希实体,将根据发送的即时消息生成的消息id插入列表中,将根据发送的即时消息生成的即时信息插入哈希实体中,实现根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,从而在接收者要读取即时信息时根据消息id获取即时信息并发送给接收者,实现提升即时消息通讯业务处理的稳定性和性能,提高用户体验度,能够单独部署即时消息通讯。

在上述技术方案的基础上,本发明还可以做如下改进:

进一步,所述插入模块包括:

第一接收模块,用于接收访客端或客服端其中一端发送的至少一条即时消息;

生成模块,用于根据至少一条即时消息生成至少一条消息id和至少一条即时信息,所述至少一条消息id中的一条消息id与至少一条即时信息中的一条即时信息相对应;

第一处理模块,用于按照接收至少一条即时消息的顺序将所述至少一条消息id中的每条消息id依次插入另一端对应的列表中,将所述至少一条即时信息插入哈希实体中。

进一步,所述取出模块包括:

第二接收模块,用于接收另一端发送的读取请求;

获取模块,用于根据所述读取请求从所述另一端对应的列表中获取一个消息id;

第二处理模块,用于根据所述一个消息id从哈希实体中获取与所述一个消息id对应的一个即时信息并发送给另一端;

删除模块,用于从所述另一端对应的列表中删除所述一个消息id,并从哈希实体中删除与所述一个消息id对应的一个即时信息。

进一步,所述即时信息包括:发送者、即时消息、即时消息的发送时间和即时消息类型。

进一步,当访客端为所述一端时,另一端为客服端,且另一端对应的列表为客服列表;当客服端为所述一端时,另一端为访客端,且另一端对应的列表为访客列表。

附图说明

图1为本发明一实施例提供的基于redis的即时消息通讯方法的流程示意图;

图2为本发明另一实施例提供的基于redis的即时消息通讯方法中的步骤2的流程示意图;

图3为本发明另一实施例提供的基于redis的即时消息通讯方法中的步骤3的流程示意图;

图4为本发明一实施例提供的基于redis的即时消息通讯系统的结构示意图;

图5为本发明另一实施例提供的基于redis的即时消息通讯系统中的插入模块的结构示意图;

图6为本发明另一实施例提供的基于redis的即时消息通讯系统中的取出模块的结构示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

本发明所有实施例中所举例子均以一端为访客端,另一端为客服端进行说明。

如图1所示,本发明实施例提供的基于redis的即时消息通讯方法,包括如下步骤:

s1,根据访客端发送的通讯请求创建会话,并根据所述会话创建客服列表、访客列表和哈希实体;

s2,接收访客端或客服端其中一端发送的即时消息,根据即时消息生成消息id和即时信息,消息id与即时信息相对应,将所述消息id插入另一端对应的列表中,将即时信息插入哈希实体中;

s3,接收另一端发送的读取请求,根据读取请求从所述另一端对应的列表中获取消息id,根据消息id从哈希实体中获取所述即时信息并发送给另一端,删除所述消息id和即时信息。

该实施例中,所述客服列表的列表名称为客服id和会话id,所述访客列表的列表名称为访客id和会话id。会话是指一个访客端与一个客服端建立连接,直到所述连接断开的过程。创建会话后设置一存储位置,该一存储位置用来存储一个访客端与一个客服端在即时消息通讯过程中涉及的所有数据。

s1步骤中是根据一个会话创建一个客服列表、一个访客列表和哈希实体,一个客服列表用来存储一个客服端的所有未读取即时信息所对应的消息id,一个访客列表用来存储一个访客端的所有未读取的即时消息对应的消息id。客服列表和访客列表没有容量限制。

下面以一具体例子说明s2步骤:接收访客端发送的即时消息,即时消息包括访客id和会话id,根据即时消息生成消息id和即时信息,消息id与即时信息相对应,根据访客id和会话id将所述消息id插入客服列表中,将即时信息插入哈希实体中。

本发明实施例提供的基于redis的即时消息通讯方法,通过创建会话,并根据会话创建客服列表、访客列表和哈希实体,将根据发送的即时消息生成的消息id插入列表中,将根据发送的即时消息生成的即时信息插入哈希实体中,实现根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,从而在接收者要读取即时信息时根据消息id获取即时信息并发送给接收者,实现提升即时消息通讯业务处理的稳定性和性能,提高用户体验度,能够单独部署即时消息通讯。

如图2所示,本发明实施例提供的基于redis的即时消息通讯方法,在上一实施例的基础上,所述s2步骤包括:

s21,接收访客端或客服端其中一端发送的至少一条即时消息;

s22,根据至少一条即时消息生成至少一条消息id和至少一条即时信息,所述至少一条消息id中的一条消息id与至少一条即时信息中的一条即时信息相对应;

s23,按照接收至少一条即时消息的顺序将所述至少一条消息id中的每条消息id依次插入另一端对应的列表中,将所述至少一条即时信息插入哈希实体中。

该实施例中,访客端或客服端其中一端可能发送了一条即时消息,也可能发送了两条即时消息,还可能发送了多条即时消息,下面以发送两条即时消息,两条即时消息分别为第一即时消息和第二即时消息,第一即时消息的发送时间早于第二即时消息的发送时间为例说明s2步骤的具体流程:

接收访客端发送的第一即时消息和第二即时消息;

根据第一即时消息生成第一消息id和第一即时信息,根据第二即时消息生成第二消息id和第二即时信息,第一消息id与第一即时信息相对应,第二消息id与第二即时信息相对应;

按照接收第一即时消息和第二即时消息的顺序将第一消息id和第二消息id依次插入客服列表中,将第一即时信息和第二即时信息插入哈希实体中,由于第一即时消息的发送早于第二即时消息的发送,因而接收即时消息的顺序是先接收第一即时消息后接收第二即时消息,故将消息id插入客服列表的顺序是先插入第一消息id后插入第二消息id。

本发明实施例提供的基于redis的即时消息通讯方法,通过接收至少一条即时消息,并根据至少一条即时消息生成至少一条消息id和至少一条即时信息,将消息id按照接收即时消息的顺序插入另一端对应的列表中,将即时信息插入哈希实体中,实现即时消息通讯的有序性和条理性,实现根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,提升了用户体验度。

可选地,本发明实施例中,在所述s1步骤之前还包括在集群服务器中搭建分布式环境的步骤。

在集群服务器中搭建分布式环境后,客服列表、访客列表和哈希实体的存储位置自动确定,即时消息通讯程序不再是固定存储在单个服务器的内存中。下面以一具体例子进行说明:配备三台主机作为集群服务器,用以实现本发明实施例的功能,在三台主机上搭建分布式环境,每台主机上设置两个节点,两个节点分别为一个主节点和一个备节点,主节点用于处理即时消息通讯业务,备节点用于同步数据。

上述实施例中,通过在集群服务器中搭建分布式环境,实现即时消息通讯所涉及的数据不再存储在单个服务器内存,提升即时消息通讯业务处理的稳定性和性能,避免由宕机引起的业务中断的情况发生,提高用户体验度。

可选地,如图3所示,本发明实施例中,所述s3步骤包括:

s31,接收另一端发送的读取请求;

s32,根据所述读取请求从所述另一端对应的列表中获取一个消息id;

s33,根据所述一个消息id从哈希实体中获取与所述一个消息id对应的一个即时信息并发送给另一端;

s34,从所述另一端对应的列表中删除所述一个消息id,并从哈希实体中删除与所述一个消息id对应的一个即时信息。

该实施例中,当客服列表中包含了多条消息id时,则客服端有多条即时信息未读取;当访客列表中包含了多条消息id时,则访客端有多条即时信息未读取。下面举一例子说明s3步骤的具体过程:

接收客服端发送的读取请求,读取请求中包括客服id和会话id;

根据所述读取请求中包括的客服id和会话id确定客服列表,从客服列表中获取最先插入的一个消息id;

根据所述一个消息id从哈希实体中获取与所述一个消息id对应的一个即时信息,将所述一个即时信息发送给客服端;

从客服列表中删除所述一个消息id,并从哈希实体中删除所述一个即时信息。

该实施例中,将与先插入的消息id对应的即时信息先行取出并发送给接收者,实现即时消息通讯的有序进行。

上述实施例中,通过读取请求获取消息id,并根据消息id获取即时信息并发送给另一端,实现快速地读取即时信息,通过删除消息id和即时信息实现完整的即时消息通讯,根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,提高用户体验度。

可选地,本发明实施例中,在所述s31步骤和s32步骤之间还包括s312步骤,所述s312步骤包括:根据所述读取请求判断客服列表或访客列表中是否有消息id,是则执行s32,否则结束。

上述实施例中,通过设置根据读取请求判断客服列表中或访客列表中是否有消息id,实现快速确定是否有未读取的即时信息,增强处理能力,提高用户体验度。

可选地,本发明实施例中,所述即时信息包括:发送者、即时消息、即时消息的发送时间和即时消息类型。

该实施例中,下面以一具体示例说明即时信息包括的内容:发送者为访客端,即时消息为访客端的用户要与客服端的用户沟通的内容,即时消息的发送时间为接收访客端发送的即时消息的接收时间,即时消息类型可以为字符串、图片、视频等。

下面以发送者为jack的访客端,即时消息的内容为您好,即时消息的发送时间为2012年3月5日17点5分,即时消息类型为字符串为例,对即时信息的存储方式进行说明:

发送者:jack;即时消息:您好;即时消息的发送时间:2012年3月5日17点5分,即时消息类型:字符串。

上述实施例中,通过即时信息包括的内容实现完整的即时消息通讯,提升了用户体验度。

可选地,本发明实施例中,当访客端为所述一端时,另一端为客服端,且另一端对应的列表为客服列表;当客服端为所述一端时,另一端为访客端,且另一端对应的列表为访客列表。

如图4所示,本发明实施例提供的基于redis的即时消息通讯系统,包括:

创建模块,用于根据访客端发送的通讯请求创建会话,并根据所述会话创建客服列表、访客列表和哈希实体;

插入模块,用于接收访客端或客服端其中一端发送的即时消息,根据即时消息生成消息id和即时信息,消息id与即时信息相对应,将所述消息id插入另一端对应的列表中,将即时信息插入哈希实体中;

取出模块,用于接收另一端发送的读取请求,根据读取请求从所述另一端对应的列表中获取消息id,根据消息id从哈希实体中获取所述即时信息并发送给另一端,删除所述消息id和即时信息。

本发明实施例提供的基于redis的即时消息通讯系统,通过创建会话,并根据会话创建客服列表、访客列表和哈希实体,将根据发送的即时消息生成的消息id插入列表中,将根据发送的即时消息生成的即时信息插入哈希实体中,实现根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,从而在接收者要读取即时信息时根据消息id获取即时信息并发送给接收者,实现提升即时消息通讯业务处理的稳定性和性能,提高用户体验度,能够单独部署即时消息通讯。

如图5所示,本发明实施例提供的基于redis的即时消息通讯系统,在上一实施例的基础上,所述插入模块包括:

第一接收模块,用于接收访客端或客服端其中一端发送的至少一条即时消息;

生成模块,用于根据至少一条即时消息生成至少一条消息id和至少一条即时信息,所述至少一条消息id中的一条消息id与至少一条即时信息中的一条即时信息相对应;

第一处理模块,用于按照接收至少一条即时消息的顺序将所述至少一条消息id中的每条消息id依次插入另一端对应的列表中,将所述至少一条即时信息插入哈希实体中。

本发明实施例提供的基于redis的即时消息通讯系统,通过接收至少一条即时消息,并根据至少一条即时消息生成至少一条消息id和至少一条即时信息,将消息id按照接收即时消息的顺序插入另一端对应的列表中,将即时信息插入哈希实体中,实现即时消息通讯的有序性和条理性,实现根据消息id能够快速获取即时信息,并对每个会话的即时消息通讯单独处理,增强处理能力,提升了用户体验度。

可选地,如图6所示,本发明实施例中,所述取出模块包括:

第二接收模块,用于接收另一端发送的读取请求;

获取模块,用于根据所述读取请求从所述另一端对应的列表中获取一个消息id;

第二处理模块,用于根据所述一个消息id从哈希实体中获取与所述一个消息id对应的一个即时信息并发送给另一端;

删除模块,用于从所述另一端对应的列表中删除所述一个消息id,并从哈希实体中删除与所述一个消息id对应的一个即时信息。

可选地,本发明实施例中,所述即时信息包括:发送者、即时消息、即时消息的发送时间和即时消息类型。

可选地,本发明实施例中,当访客端为所述一端时,另一端为客服端,且另一端对应的列表为客服列表;当客服端为所述一端时,另一端为访客端,且另一端对应的列表为访客列表。

本发明实施例中的基于redis的即时消息通讯系统中各个模块所执行的功能及产生的效果已经在上述实施例中的基于redis的即时消息通讯方法中作了详细的说明,在此不再赘述。

本发明所有实施例均可应用在在线客服系统中,本发明所有实施例将单个服务器中的内存设置为集群式服务器中的分布式内存,单独部署基于redis的即时消息通讯,基于redis的即时消息通讯是独立的,可不断扩展。

redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,即分布式缓存。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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