客户端即时通信方法、装置、设备及介质与流程

文档序号:21926639发布日期:2020-08-21 14:47阅读:131来源:国知局
客户端即时通信方法、装置、设备及介质与流程

本发明涉及通信技术领域,尤其涉及一种客户端即时通信方法、装置、设备及介质。



背景技术:

即时通信软件目前已经成为用户通过网络进行通信的重要手段。随着近年来日益加快的实时沟通需求,即时通信软件也在迅速发展,已经逐渐成为日常沟通的重要手段。

目前该即时通信技术主要用于聊天系统的客户端之间的点对点通信。现有的点对点通信过程为:目前聊天系统的session大多保存在本地的聊天服务器中,客户端需要借助聊天服务器与客户端之间保持的session进行通信。而且聊天服务器多为非集群环境部署,连接的客户端数量存在一定限制,当客户端数量达到聊天服务器上限时,就会对整个聊天系统造成通信影响。如果需要连接更多的客户端就需要提高聊天服务器的硬件配置,可扩展性非常低。

为了提高聊天服务器可连接的客户端数量,必须提高聊天服务器的扩展性,那么就需要对聊天服务器进行集群化部署。而为了实现集群环境下客户端之间的通信,在客户端连接聊天服务器时,需要使用关系型数据库保存客户端连接信息,以使得客户端通信时,聊天服务器能从关系型数据库中获取目标客户端连接信息,从而得到该目标客户端连接的聊天服务器,然后借助集群服务器之间的通信向目标客户端发送信息。

在实现集群环境下的点对点通信时,无法方便的找到目标客户端的具体位置,目前只能需要借助关系型数据库定位目标客户端连接信息,但是这种方式读写信息的效率低,特别是当客户端数量不断增加时读写效率速度将更慢,而且当数据库损坏时,会对客户端之间的通信造成严重影响。



技术实现要素:

为了克服现有技术的不足,本发明的目的之一在于提供一种客户端即时通信方法,通过缓存数据库来共享客户端session,实现服务器集群环境下客户端之间的点对点通信效率,保障客户端点对点的即时通信稳定性。

本发明的目的之一采用以下技术方案实现:

一种客户端即时通信方法,包括以下步骤:

接收第一客户端向第二客户端发送的消息,获取所述第一客户端和第二客户端的客户端编号,并根据所述第一客户端和第二客户端的客户端编号在缓存数据库中分别获取所述第一客户端和第二客户端的session信息和连接的服务器信息;

判断所述第一客户端连接的服务器信息和第二客户端连接的服务器信息是否相同,若相同,则通过第一客户端连接的服务器向所述第二客户端转发所述消息;若不同,则通过所述第二客户端连接的服务器向所述第二客户端转发所述消息。

进一步地,所述缓存数据库存储客户端编号以及与所述客户端编号对应客户端的session信息和连接的服务器信息;所述缓存数据库在客户端向服务器发送连接请求时,接收或更新所述客户端的客户端编号、session信息和连接的服务器信息,具体包括以下步骤:

服务器接收客户端发送连接请求时,与所述客户端通过socket建立连接,并获取所述客户端的客户端编号;

服务器建立与缓存数据库的连接,并根据所述客户端编号从所述缓存数据库中获取所述客户端的session信息和连接的服务器信息;

若获取所述客户端的session信息和连接的服务器信息失败,则将所述客户端编号、所述客户端的session信息以及连接的服务器信息以key-value保存到所述缓存数据库中;

若获取所述客户端的session信息和连接的服务器信息成功,则缓存数据库中更新所述客户端编号、所述客户端的session信息以及连接的服务器信息。

进一步地,若所述客户端连接中断,将所述客户端的session信息和所述客户端连接的服务器信息从所述缓存数据库删除。

进一步地,所述第一客户端发送的消息包括待发送的消息和所述第二客户端的客户端编号。

进一步地,若通过所述第二客户端的客户端编号从所述缓存数据库未获取到所述第二客户端的session信息和所述第二客户端连接的服务器信息,则判定所述第二客户端连接中断,将所述第一客户端发送的消息发送到所述第一客户端连接的服务器即结束。

进一步地,所述缓存数据库为redis数据库或memcached系统。

进一步地,连接若干所述redis数据库或mencached系统形成缓存数据库集群。

本发明的目的之二在于提供一种客户端即时通信装置,其通过共享客户端的session信息,实现集群环境下客户端之间的点对点通信,并且能有效提高消息传输效率。

本发明的目的之二采用以下技术方案实现:

信息接收模块,用于接收第一客户端向第二客户端发送的消息,获取所述第一客户端和第二客户端的客户端编号,并根据第一客户端和第二客户端的客户端编号在缓存数据库中分别获取第一客户端和第二客户端的session信息和连接的服务器信息;

信息转发模块,用于判断所述第一客户端连接的服务器信息和第二客户端连接的服务器信息是否相同,若相同,则通过第一客户端连接的服务器向所述第二客户端转发所述消息;若不同,则通过所述第二客户端连接的服务器向所述第二客户端转发所述消息。

本发明的目的之三在于提供执行发明目的之一的电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,所述计算机程序被处理器执行时实现上述的客户端即时通信方法。

本发明的目的之四在于提供存储发明目的之一的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的客户端即时通信方法。

相比现有技术,本发明的有益效果在于:

本发明利用redis等缓存数据库保存集群环境下在线客户端的session信息,并在集群环境下共享,使得服务器能有效获取集群环境下各客户端的连接信息,且获取信息的效率高,从而保障了客户端之间点对点通信的即时性,提高了客户端之间的通信效率和通信稳定性。

附图说明

图1是本发明客户端即时通信方法的流程图;

图2是实施例1中redis数据库集群化实现客户端即时通信的部署图;

图3是实施例2的客户端即时通信装置的结构框图;

图4是实施例3的电子设备的结构框图。

具体实施方式

以下将结合附图,对本发明进行更为详细的描述,需要说明的是,下参照附图对本发明进行的描述仅是示意性的,而非限制性的。各个不同实施例之间可以进行相互组合,以构成未在以下描述中示出的其他实施例。

实施例1

本实施例提供了一种客户端即时通信方法,旨在使用reids等缓存数据库以key-value形式缓存客户端编号、客户端的session信息以及客户端连接的服务器信息,使得在客户端点对点通信过程中,根据发送客户端提供的接收客户端编号,能从redis中获取该接收客户端的session信息和接收客户端连接的服务器信息,从而实现向接收客户端发送消息,从而完成客户端之间的点对点通信。上述客户端即时通信方法分为两种情况:

(1)若客户端即时通信发生在同一服务器的两台客户端之间,则服务器通过redis获取到目标客户端的session信息,即可直接向目标客户端直接发送消息。

(2)若客户端即时通信发生在集群环境下连接到不同服务器的两台客户端之间,则通过redis获取到接收客户端的session信息和接收客户端连接的服务器信息。判断接收客户端和发送客户端是否连接到同一台服务器,若连接的服务器不同,则先向接收客户端连接的服务器发送消息,然后再通过接收客户端连接的服务器向接收客户端发送消息,从而实现集群环境下客户端之间的点对点通信。

根据上述原理,对客户端即时通信方法进行介绍,如图1所示,客户端即时通信方法,具体包括以下步骤:

服务器接收第一客户端发送的连接请求,与第一客户端建立socket连接并获取第一客户端的客户端编号;然后通过第一客户端的客户端编号在缓存数据库中获取所述第一客户端的session信息和所述第一客户端连接的服务器信息;

建立socket连接后,服务器接收所述第一客户端发送的消息,并解析消息获取到第二客户端的客户端编号,然后通过所述第二客户端的客户端编号从缓存数据库中获取所述第二客户端的session信息和所述第二客户端连接的服务器信息;

服务器根据获取到的信息判断所述第一客户端连接的服务器信息与所述第二客户端连接的服务器信息是否相同,若相同,服务器直接向所述第二客户端转发所述消息;若不同,服务器先向所述第二客户端连接的服务器转发所述消息,然后再通过所述第二客户端连接的服务器向所述目标客户端转发所述消息。

本实施例的客户端即时通信方法应用于服务器集群环境下的客户端通信,上述服务器可以为背景技术中提及的聊天服务器,首先为了实现集群环境下的客户端即时通信,需要先建立服务器集群,使得服务器之间能够互相调用,即通过提供服务器之间消息通信的接口以建立服务器之间的通信,从而完成服务器集群的建立,这样就能够使得客户端连接的服务器能够作为中间媒介,简单地实现集群环境下客户端之间的通信。上述客户端即时通信方法中涉及的第一客户端指发送消息的客户端,第二客户端指接收消息的客户端,第一客户端构建发送的消息,通过上述服务器(与第一客户端连接的服务器)发送给第二客户端,第二客户端接收消息后进行显示。

其中,所述第一客户端发送的消息包括但不限于待发送的消息和所述第二客户端的客户端编号,在其他实施例中,也可以将所述第一客户端的客户端编号存储在所述第一客户端发送的消息里,使得服务器在接收第一客户端发送的消息后,再连接缓存服务器进行第一客户端的信息获取。

因上述客户端即时通信方法应用在服务器集群环境下,上述服务器(也可以为第三方终端)根据从缓存数据库中获取到的信息,去判断所述第一客户端和第二客户端是否连接的是同一个服务器,当第二客户端连接的服务器与所述第一客户端连接的服务器相同时,所述第一客户端连接的服务器之间消息的接口将所述消息先发送给第二客户端连接的服务器,然后再由第二客户端连接的服务器将所述消息转发给所述第二客户端,从而完成客户端之间的即时通信。

本实施例中选用redis数据库为缓存数据库,redis数据库具有读写高效,容量充足的优点,有利于提供客户端之间的即时通信效率。

通过本实施例的客户端即时通信方法,能实现客户端的session信息和连接的服务器信息的缓存和共享,提高客户单即时通信的效率,并通过对redis数据库中的客户端的session信息和连接的服务器信息进行获取,完成不同服务器连接的客户端之间点对点即时通信。

在其他实施例中,本发明的客户端即时通信方法应用在连接同一服务器的客户端之间的即时通信。

为实现客户端的session信息共享,所述缓存数据库存储客户端编号以及与所述客户端编号对应客户端的session信息和连接的服务器信息;所述缓存数据库在客户端向服务器发送连接请求时,接收或更新所述客户端的客户端编号、session信息和连接的服务器信息,具体包括以下步骤:

服务器接收客户端发送连接请求时,与所述客户端通过socket建立连接,并获取所述客户端的客户端编号;

服务器建立与缓存数据库的连接,并根据所述客户端编号从所述缓存数据库中获取所述客户端的session信息和连接的服务器信息;

若获取所述客户端的session信息和连接的服务器信息失败,则将所述客户端编号、所述客户端的session信息以及连接的服务器信息以key-value保存到所述缓存数据库中;

若获取所述客户端的session信息和连接的服务器信息成功,则缓存数据库中更新所述客户端编号、所述客户端的session信息以及连接的服务器信息。

在客户端断开与服务器的连接后,服务器将根据客户端编号从redis数据库中删除该客户端的session信息和连接的服务器信息,从而能保证redis数据库中缓存的都是在线的客户端(与服务器连接的客户端)的session信息和连接的服务器信息。

这些在线的客户端既可以发送消息也可以接受消息。若作为接收消息的客户端(目标客户端)的session信息和连接的服务器信息在redis数据库不存在,就说明该客户端离线,无法服务器无法连接到该客户端,将待发送的消息转发到该发送消息的客户端的服务器,即结束此时消息发送,直到接收消息的客户端连接其服务器时,再由发送消息的客户端的服务器继续进行发送。

优选地,所述缓存数据库还可以为memcached系统。

优选地,当客户端的在线量较大时,可以将redis数据库或memcached系统集群化,即连接若干所述redis数据库或mencached系统形成缓存数据库集群,能有效的提高访问速度和存储空间,并且当部分redis数据库或mencached系统瘫痪时不会对即时通信服务造成影响,大大提高了即时通信服务的生命周期。以redis数据库为例,如图2所示,建立redis数据库集群实现服务器集群环境下客户端即时通信。

实施例2

本实施例公开了一种对应实施例1的客户端即时通信方法对应的装置,请参照图3所示,包括:

信息接收模块310,用于接收第一客户端向第二客户端发送的消息,获取所述第一客户端和第二客户端的客户端编号,并根据第一客户端和第二客户端的客户端编号在缓存数据库中分别获取第一客户端和第二客户端的session信息和连接的服务器信息;

信息转发模块320,用于判断所述第一客户端连接的服务器信息和第二客户端连接的服务器信息是否相同,若相同,则直接向所述第二客户端转发所述消息;若不同,则通过所述第二客户端连接的服务器向所述第二客户端转发所述消息。

其中,上述缓存数据库为redis数据库或memcached系统。

当信息接收模块310从redis数据库或memcached系统中获取所述第一客户端的客户端编号对应的所述第一客户端的session信息和连接的服务器信息时,若获取失败,将所述第一客户端的客户端编号、所述第一客户端的session信息以及所述第一客户端连接的服务器信息以key-value保存到redis数据库中,具体以所述客户端编号为key,以所述第一客户端的session信息以及连接的服务器信息为value;若获取成功,所述redis数据库更新所述第一客户端的客户端编号、所述第一客户端的session信息以及连接的服务器信息。

当通过所述第二客户端的客户端编号没有从所述缓存数据库中获取到所述第二客户端的session信息和连接的服务器信息时,表明第二客户端离线,无法连接到该第二客户端,将所述消息保存到所述第一客户端的服务器,即结束第一客户端消息发送过程,直到第二客户端重新连接其服务器时,再重新获取所述第二客户端的session信息和所述第二客户端连接的服务器信息,所述第一客户端的服务器再通过信息转发模块320继续转发所述消息。

实施例3

图4为本发明实施例3提供的一种电子设备的结构示意图,如图4所示,该电子设备包括处理器410、存储器420、输入装置430和输出装置440;计算机设备中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;电子设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线连接为例。

存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的客户端即时通信方法对应的程序指令/模块(例如,客户端即时通信装置中的信息接收模块310、信息转发模块320)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现实施例1的客户端即时通信方法。

存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置430可用于接收连接请求和客户端发送的消息等。输出装置440用于输出需要发送的消息。

实施例4

本发明实施例4还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于实现客户端即时通信方法,该方法包括:

接收第一客户端向第二客户端发送的消息,获取所述第一客户端和第二客户端的客户端编号,并根据所述第一客户端和第二客户端的客户端编号在缓存数据库中分别获取所述第一客户端和第二客户端的session信息和连接的服务器信息;

判断所述第一客户端连接的服务器信息和第二客户端连接的服务器信息是否相同,若相同,则通过第一客户端连接的服务器向所述第二客户端转发所述消息;若不同,则通过所述第二客户端连接的服务器向所述第二客户端转发所述消息。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的客户端即时通信方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

值得注意的是,上述客户端即时通信方法或装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。

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