分布式推送服务器系统及应用该系统的数据推送方法
【技术领域】
[0001]本发明涉及网络服务器架构技术领域,尤其涉及一种分布式推送服务器系统及应用该系统的数据推送方法。
【背景技术】
[0002]随着移动互联网的发展,我们已经见过一些令人惊叹不己的微信、滴滴打车、大黄峰等优秀应用软件,它们的应用首先是需要信息的高实时性,更高的准确和到达率,再者是服务器系统需要承载更大的并发量,具有更好的伸缩性以及可靠性,才能保证整体服务的信息安全、连续、可共享、易整合和高可用。它们的这些应用都采应了 push技术。push技术本身存在非常广泛的应用需求,特别适用于聊天、租车、天气预报、股票软件等移动互联网应用。
[0003]现有push框架不够成熟,实现原理各自不同,没有统一的实现标准,使的开发的应用程序很难得到移植。现有的解决方法有两种:一种是采用openfire开源组件,一种是基于http长轮询实现。
[0004]openfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP (Jabber)协议,使用它可以轻易的构建高效率的即时通信服务器.但缺点也显而易见openfire单机承载量有限,xmpp协议数据负载太重,不能提供二进制数据支持。
[0005]http长轮询实现方式的原理是客户端不断的向服务器发送请求以获取最新的数据信息,http长轮询实现方式对于服务端和客户端实现相对简单,编写比较容易,所以开发人员维护成本相对比较低,适用于小型应用。
[0006]http长轮询的工作流程如下:
[0007]1、轮询的建立:客户端发起http请求建立连接,此时由于服务器还未做出应答,所以HTTP也一直处于连接状态中。
[0008]2、数据的推送:在客户端循环过程中,服务器程序对客户端关注的数据变动进行监控,如发现更新,将该信息输出给浏览器,随即断开连接,完成应答过程,实现“服务器推”。
[0009]3.轮询的终止:轮询可能在以下2种情况时终止
[0010]3.1.有新数据推送
[0011]当循环过程中服务器向客户端推送信息后,应该主动结束程序运行从而让连接断开,这样客户端才能及时收到数据。
[0012]3.2网络故障或异常
[0013]由于网络故障等因素造成的请求超时或出错也可能导致轮询的意外中断,此时客户端将收到错误信息或断开信息。
[0014]4.轮询的重建:当客户端收到断开指令或错误信息,应马上重新发起请求,开始一个新的轮询周期。
[0015]但是,http长轮询存在以下缺点问题
[0016]1、由于http协议是无状态协议,每次会话都要携带用户信息,导致用户信息反复携带到服务器,浪费宽带。
[0017]2、请求中有大半是无用,因为服务器和客户端的消息并不是每个时刻都有,客户端反复进行与服务器连接建立与断开,增加服务器负载和浪费服务器资源。
[0018]3、消息到达不够及时,因为客户端每次接收一次消息都要断开连接,导致客户端消息较多时,不能通过一个连接连续接收消息,导致消息延时。
【发明内容】
[0019]本发明的目的是为了解决上述问题,提供一种分布式推送服务器系统及应用该系统的数据推送方法,实现服务器承载力的提升和数据传送的效率提高。
[0020]本发明采取的技术方案是:
[0021]一种分布式推送服务器系统,其特征是,包括多个数据服务器、一个中间服务器、推送服务器和终端,所述多个数据服务器分别与所述中间服务器和推送服务器联接,所述终端与所述中间服务器和推送服务器通讯联接,所述中间服务器包括选举模块,所述终端向所述中间服务器发送连接请求,所述中间服务器通过所述选举模块从所述多个数据服务器中选出负载最小的服务器作为目标服务器,并将所述目标服务器信息发送至终端,所述终端连接至所述目标服务器,所述推送服务器将目标服务器的数据对所述终端进行实时推送。
[0022]进一步,所述中间服务器还包括列表更新模块,所述中间服务器通过所述选举模块定时得到目标服务器,所述列表更新模块对所述中间服务器的列表中的目标服务器进行更新,所述中间服务器得到所述终端的连接请求后,直接从所述列表中得到目标服务器信息。
[0023]进一步,所述终端包括信息处理模块,所述信息处理模块将所述终端发送至所述目标服务器的信息进行简化,所述简化过程包括去除通信信息中的注释代码。
[0024]进一步,所述推送服务器启动时将可用的数据服务器列表在所述中间服务器中注
ΠΠ.Ws O
[0025]进一步,所述终端接收到所述推送服务器推送的信息后,所述终端给所述推送服务器发送回执,所述推送服务器使所述目标服务器与所述终端解除信息发送连接关系。
[0026]一种应用上述的分布式推送服务器系统的数据推送方法,其特征是,包括如下步骤:
[0027](I)所述终端向中间服务器发送连接请求;
[0028](2)所述中间服务器通过所述选举模块选出所述目标服务器;
[0029](3)所述中间服务器将目标服务器信息发送至终端;
[0030](4)所述终端连接与所述目标服务器建立连接;
[0031](5)所述目标服务器的目标数据由所述推送服务器发送至所述终端。
[0032]进一步,所述列表更新模块对所述中间服务器的列表中的目标服务器进行更新,所述中间服务器得到所述终端的连接请求后,直接从所述列表中得到目标服务器信息。
[0033]进一步,所述第⑴步,中,所述终端通过所述信息处理模块,将发送至所述目标服务器的信息进行简化。
[0034]进一步,所述推送服务器启动时将可用的数据服务器列表在所述中间服务器中注
ΠΠ.Ws O
[0035]进一步,所述第(5)步后包括如下步骤:所述终端接收到所述推送服务器推送的信息后,所述终端给所述推送服务器发送回执,所述推送服务器使所述目标服务器与所述终端解除信息发送连接关系。
[0036]本发明的有益效果是:
[0037](I)解决了单机承载量有限的问题。通过客户端和服务端交互的方式,可以让服务端通过从η台服务器中选择一台比较负载较小的服务器用于客户端对端的连接,通过这种方式实现服务器集群,从而可以达到承载更多的客户端连接请求。
[0038](2)解决了数据传输载体较大问题,openfire采用xmpp协议为数据载体,导致发送的每一个包都会有很多与传输消息不相关的其它描述,往往描述本身的大小都是传输消息的几倍大,导致数据冗余较大。本发明可减少客户端流量和数据传输较大。
[0039](3)解决了消息到达率不高的问题,消息传输不可必免的消息丢失,导致客户端无法接收到消息,通过消息id回执和消息多次发送来保证消息的到达率为100%,保证了客户端接收到消息的完整性和消息的不丢失。
【附图说明】
[0040]附图1是本发明的服务器系统结构示意图;
[0041]附图2是中间服务器列表更新结构示意图;
[0042]附图3是消息发送策略示意图;
[0043]附图4是消息发送的简化示意图。
【具体实施方式】
[0044]下面结合附图对本发明分布式推送服务器系统及应用该系统的数据推送方法的【具体实施方式】作详细说明。
[0045]分布式推送服务器系统利用合理高效的逻辑分层方式和数据流调用方式通过整体分层架构设计和面向对象的数据流调用组合策略实现。将客户端与服务端的连接建立来达到可以合理分配客户端到不同服务器,达到服务器的资源合理利用,减少服务器之间的信息交换。
[0046]参见附图1,分布式推送服务器系统包括多个数据服务器1、一个中间服务器3、推送服务器2和终端4,多个数据服务器I包括Key-Value数据库服务器,企业消息系统服务器和应用程序协调服务器