一种服务器主动推送数据的方法和系统的制作方法

文档序号:6339750阅读:578来源:国知局
专利名称:一种服务器主动推送数据的方法和系统的制作方法
技术领域
本发明涉及信息系统开发技术领域,更具体地说,涉及一种服务器主动推送数据 的方法和系统。
背景技术
随着Web技术的流行,越来越多的应用从原有的C/S (Cl ient/Server,客户机/服 务器区)模式转变为B/S (Browser/Server,浏览器/服务器)模式,享受着Web技术所带来 的各种优势,例如跨平台、免客户端维护、跨越防火墙、扩展性好等。在这种模式下,用户工 作界面是通过万维网浏览器来实现,极少部分事务逻辑在前端浏览器实现,但是主要事务 逻辑在服务器端实现。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本 和工作量,降低了用户的总体成本。
但是基于浏览器的应用,也有它不足的地方,传统模式的Web系统(包括ajax技 术)都是以客户端发出请求、服务器端响应的方式工作,不具备由服务器端主动向浏览器 推送信息的能力,这无法满足对实时性要求很高的系统的需求,诸如监控系统、即时通讯系 统、报价系统。由于浏览器中的页面每次需要全部刷新才能从服务器端获得最新的数据或 向服务器传送数据,这样产生的延迟所带来的视觉感受非常糟糕。
目前,现有技术已经具备一些“服务器推”模式的解决方案
(1)基于 flash 套接口(Flash XMLSocket)的实现方案
须依赖Flash播放器才能正常运行,该方式在flash程序中实现了与C/S的套接 口(socket) —致的能力,利用Flash提供的XMLSocket套接口,在javascript中直接调用, 实现“服务器推”模式的开发和应用。
(2)基于 Java Applet 套接口(java. net. Socket)的实现方案
须在浏览器安装jvm,如果客户端安装了 Java Applet,后台服务可以直接在java 代码中通过java. net. Socket完成“服务器推”的动作。
上述两种实现方案中,Flash播放器以及Applet这样的浏览器插件技术本身又有 许多问题,例如跨平台问题和插件版本兼容性问题。
第三种“服务器推”模式的解决方案是基于http请求的Comet技术。Comet是一 套B/S下的,基于纯http请求的,专门用来解决“服务器推”的技术模型。目前业界已经有 一些比较成熟的Comet框架
1. Pushlet
该框架是Comet模型的一套实现,主要技术要点描述如下
通过前台的javascript和后台的java代码实现一套订阅请求机制,这也是实 时推送的前提条件。这包括订阅主题、订阅回话管理、订阅时长等等。在浏览器端提供 javascript的api,以主题为订阅标识,通过ajax向后台发送http请求。后台接到订阅信 息后将订阅控制内容返回给浏览器端。浏览器端根据后台派发的控制信息,定时向后台发 送取数请求,后台响应该请求即完成推送动作。这实际上是前台自动轮询的一种变相实现,只是轮询需要的时间间隔、主题等,由后台来维护。
2. Bosh
Bosh是一种基于http长连接请求的Comet框架。同样实现了一套订阅请求机制。 浏览器与服务端的长连接请求过程可描述如下
浏览器发送第一个订阅请求,服务器端将该请求保持。当第一个订阅有数据需要 实时推送时,将数据载入到第一个请求的响应中,并释放;
浏览器发送第二个订阅请求,如果第一个请求仍然被保持在服务器端且没有数据 需推送,则返回空包,然后保持第二个请求。如果浏览器有新的订阅请求,再重复使用第一 个请求,如此重复。
然而,对于Pushlet模式来说,虽然轮询的规则是由服务端控制的,但原理上依然 采取的是前台轮询机制,为了提高推送实时程度,势必须加大轮询频率(如每2秒轮询一次 或更少),这会显著增加对服务器的压力;另外,轮询机制不论是否有数据推送,都需不断 地“请求返回”浪费了较多的网络带宽。实时性和服务器性能的矛盾是pushlet的主要缺 陷。
而Bosh模式相对pushlet来讲,虽有效减轻了服务器负担,节省了网络带宽,但空 包返回率在推送频率低的环境中仍会很高,而且订阅控制信息与推送数据在同一个请求中 返回,且两者通常属于不同的主题,这在逻辑上比较凌乱。发明内容
有鉴于此,本发明实施例提供一种服务器主动推送数据的方法和系统,满足对浏 览器实时推送数据的要求,能够提高应用系统的并发度,减少服务器的性能消耗。
本发明实施例提供一种服务器主动推送数据的方法,所述方法包括
浏览器发起注册请求,以连接服务器并接受所述服务器主动推送的数据,在所述 浏览器注册成功后,所述浏览器与服务器之间建立用于传输主动推送的数据的数据通道;
所述浏览器发起订阅请求,所述订阅请求包含订阅数据的类型参数以及表示订阅 内容的标识;
所述服务器根据所述订阅请求,通过所述数据通道,向所述浏览器主动推送相应 数据。
优选的,当所述数据通道建立之后,所述方法还包括
所述浏览器向服务器发送周期性心跳信息,以表示所述浏览器与服务器之间的持 续连接。
优选的,当需要将多条数据同时推送至所述浏览器时,所述方法还包括
将所述多条数据进行串行化处理,通过所述数据通道,将经过串行化处理后的数 据按顺序依次推送至所述浏览器。
优选的,所述服务器根据所述订阅请求,通过所述数据通道,向所述浏览器主动推 送相应数据,具体包括
所述服务器根据所述订阅请求,将相应数据转化为xml或Json或文本模式,通过 所述数据通道向所述浏览器主动推送。
优选的,所述方法还包括
当所述浏览器请求断开与服务器的连接时,所述数据通道被取消。
一种服务器主动推送数据的系统,所述系统包括浏览器和服务器;其中,
所述浏览器,用于发起注册请求,以连接服务器并接受所述服务器主动推送的数 据,并在所述浏览器与服务器之间建立用于传输主动推送的数据的数据通道之后,发起订 阅请求,所述订阅请求包含订阅数据的类型参数以及表示订阅内容的标识;
所述服务器,用于在所述浏览器注册成功后,在所述浏览器与服务器之间建立所 述数据通道,并根据所述订阅请求,通过所述数据通道,向所述浏览器主动推送相应数据。
优选的,当所述数据通道建立之后,所述浏览器还用于向服务器发送周期性心跳 信息,以表示所述浏览器与服务器之间的持续连接。
优选的,当需要将多条数据同时推送至所述浏览器时,所述服务器还用于
将所述多条数据进行串行化处理,通过所述数据通道,将经过串行化处理后的数 据按顺序依次推送至所述浏览器。
优选的,所述服务器还用于根据所述订阅请求,将相应数据转化为xml或Json或 文本模式,通过所述数据通道向所述浏览器主动推送。
优选的,当所述浏览器请求断开与服务器的连接时,所述服务器还用于取消所述 数据通道。
同现有技术相比,本发明实施例提供了 一种基于请求模式且不依赖其他第三方框 架或插件的服务器与浏览器的主动推模式的应用框架,当浏览器建立与服务器的连接之 后,服务器建立处于浏览器与服务器之间建立用于传输主动推送的数据的数据通道,服务 器能够通过该数据通道,根据浏览器的订阅请求,向浏览器主动推送相应数据,可见,服务 器能够根据浏览器的订阅请求进行数据的主动推送,因此,不需浏览器采用前台轮询的方 式判断是否有主动推送的数据,可最大程度减少服务器连接的占用,从而提高应用系统的 并发度,减少服务器的性能消耗。


为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中 所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实 施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图 获得其他的附图。
图1为本发明实施例提供的一种服务器主动推送数据的方法步骤示意图2为本发明实施例提供的浏览器与服务器之间建立Http连接的示意图3为本发明实施例提供的服务器根据浏览器的请求主动推送数据的流程示意 图4为本发明实施例提供的服务器主动推送数据的系统结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种服务器主动推送数据的方法及系统,以提高应用系统的并 发度,减少服务器的性能消耗。为了便于对本发明实施例技术方案的充分理解,使得本发明 的目的、技术方案及优点更加清楚明白,下面将结合本发明实施例中的附图,对本发明实施 例中的技术方案进行清楚、完整的描述。
本发明实施例提供了一种服务器主动推送数据的方法,如图1所示,为该方法的 步骤流程,该方法可以包括以下步骤
步骤101、浏览器发起注册请求,以连接服务器并接受所述服务器主动推送的数 据,在所述浏览器注册成功后,所述浏览器与服务器之间建立用于传输主动推送的数据的 数据通道;
步骤102、所述浏览器发起订阅请求,所述订阅请求包含订阅数据的类型参数以及 表示订阅内容的标识;
步骤103、所述服务器根据所述订阅请求,通过所述数据通道,向所述浏览器主动 推送相应数据。
Comet是一种新的Web应用架构。基于这种架构开发的应用中,服务器会主动以异 步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet架构非常适合事 件驱动的Web应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室 和Web版在线游戏等。
本发明实施例中,采用完整的请求、订阅、推送机制,与其配套的还有一个供前台 浏览器使用的API (Application Programming hterface,应用程序编程接口),可以称之 为Comet-client。本发明实施例技术方案实际是一个完整的comet技术实现,所有的请求 都由Comet-client提供的方法发送,例如发送方式采用ajax (Asynchronous JavaScript and XML,异步Javakript和XML),即xmlHttpRequest请求,并在服务器用nio方式保持请 求,以提高系统性能和并发度,浏览器前后台之间的信息交互采用xml作为数据格式,订阅 控制信息和推送数据均采用此数据模型。
由此,本发明实施例提供了一种基于请求模式且不依赖其他第三方框架或插件的 服务器与浏览器的主动推模式的应用框架,当浏览器建立与服务器的连接之后,服务器建 立处于浏览器与服务器之间建立用于传输主动推送的数据的数据通道,服务器能够通过该 数据通道,根据浏览器的订阅请求,向浏览器主动推送相应数据,可见,服务器能够根据浏 览器的订阅请求进行数据的主动推送,因此,不需浏览器采用前台轮询的方式判断是否有 主动推送的数据,可最大程度减少服务器连接的占用,从而提高应用系统的并发度,减少服 务器的性能消耗。
根据httpl. 1规范的规定,客户端与服务器之间建立的Http连接不能超过两个, 出现的两个以上的新的连接会被阻塞。本发明实施例中,客户端与服务器之间建立的Http 连接有两个,本发明实施例中将两个可用Http连接分别划分为显式连接(explicit)和隐 式连接(implicit),如图2所示,为浏览器与服务器之间建立Http连接的示意图,其中,粗 线条表示显式请求、细线条表示隐式请求,虚线表示相应请求的返回,通过请求的返回,浏 览器可以获知服务器已经收到相应的显式请求,并已经执行了对于相关请求的处理操作。 显式连接用来发送有逻辑含义的注册请求及订阅请求。上述两种请求中,显式请求不需在服务器被保持(hold),即对显示请求处理的线程执行挂起操作。对于订阅请求来说,仅仅 是将订阅请求中携带的订阅数据的类型参数以及表示订阅内容的标识信息保存在订阅队 列中,然后立即返回,这就可以保证显式连接的灵活性。而隐式请求用来发送建立数据通道 请求,它不包含任何逻辑含义。服务器将数据通道请求hold起来,并不返回,一旦有数据需 要推送,就将返回数据写入该数据通道,完成推送,然后将数据通道释放。当浏览器获知数 据通道被释放后,即立刻再次发起隐式连接请求,将推动数据的主动权重新交给服务器。
结合图2中的时间区域划分,隐式连接可以跨越时间区域,完成前台异步。在同一 时间区域中,隐式请求和显示请求可同时发送或返回,互不干扰。
需要说明的是,如果出现需要将多条数据同时推送给同一浏览器的情况,由于数 据通道只有一条,因此并发的推送动作会在这里被“串行化”处理,即将所述多条数据进行 串行化处理,通过所述数据通道,将经过串行化处理后的数据按顺序依次推送至所述浏览ο
本发明实施例中,订阅请求可以分为三类普通请求,单次订阅请求和自动 订阅请求(即长订阅请求),它们分别可以称为commonRequest、subscribeOnce及 subscribeAuto。普通请求是与其他两种订阅请求区别开的,这是对传统的客户端请求服务 端返回模式的支持;而订阅类型的请求,将推动数据的主动权交给了后台服务器,服务器以 订阅请求中携带的类型参数以及表示订阅内容的标识,主动的向浏览器推送数据。单次订 阅请求与自动订阅请求的不同之处在于浏览器根据单次订阅请求得到数据后,其发送的 主题将被服务器删除,整个订阅过程结束;浏览器根据自动订阅请求得到数据后,服务器并 不删除该订阅的主题,继续保持订阅状态,可根据自动订阅请求的参数信息连续向浏览器 主动推送数据,直到浏览器人为地调用comet-client提供的取消订阅为止。上述三类均是 显式请求,而针对两种订阅类型的请求而推送的数据需要隐式请求的发起以建立浏览器与 服务器之间的数据通道。
图3所示为服务器根据浏览器的请求主动推送数据的流程示意图,整个过程可以 包括如下操作步骤
步骤301、浏览器发起注册(join)请求,向后台服务器请求将本浏览器加入服务 器的session管理,以连接服务器并接受所述服务器主动推送的数据;
步骤302、服务器接收浏览器发起的join请求,将该浏览器加入服务器的session 管理,并向浏览器反馈join成功反馈信息;
步骤303、浏览器向服务器发起隐式连接请求,以实现服务器根据该隐式请求建立 处于浏览器与服务器之间、用于传输主动推送的数据的数据通道;
步骤304、浏览器向服务器发送周期性心跳(heartbeat)信息,以表示所述浏览器 与服务器之间的持续连接;
步骤305、服务器接收浏览器发送的心跳信息,并实时向浏览器反馈接收成功的反馈信息;
步骤306、浏览器发起普通请求(commonRequest),该普通请求中通常包含有表示 该请求是普通请求的类型参数,除此之外,普通请求中还包含了表示订阅内容的标识,当 然,还包含了发起该请求的浏览器的地址信息;
步骤307、服务器接收普通请求,向浏览器反馈成功接收该请求的反馈信息;
本发明实施例中,由于订阅请求可以分为三类普通请求,单次订阅请求和自动订 阅请求,因此,浏览器还可能发起另外两种请求,分别如步骤306'和306"所示
步骤306'、浏览器发起单次订阅请求(subscribeOnce),同理,该请求中携带有 表示该请求是单次订阅请求的类型参数、表示订阅内容的标识以及发起该请求的浏览器的 地址信息;
步骤307'、服务器接收单次订阅请求,向浏览器反馈成功接收该请求的反馈信 息;
步骤306〃、浏览器发起自动订阅请求(subscribeAuto),同理,该请求中携带有 表示该请求是自动订阅请求的类型参数、表示订阅内容的标识以及发起该请求的浏览器的 地址信息;
步骤307"、服务器接收自动订阅请求,向浏览器反馈成功接收该请求的反馈信 息;
步骤308、当出现需要向浏览器推送的数据时,服务器利用已经建立的数据通道, 向浏览器主动推送相应数据;
当前数据推送完毕时,数据通道通常会被释放。这时,如果再次出现需要服务器推 送的数据时,需要浏览器再次向服务器发送隐式连接,以实现由服务器再次建立数据通道 的目的,如步骤309所示;
步骤310、服务器通过再次建立的数据通道,向浏览器主动推送数据;
步骤311、浏览器向服务器发送取消连接的中断请求(leave);
步骤312、服务器将已存在于自身session管理中的该浏览器的相关信息进行删 除,并清空针对该浏览器生成的订阅队列,并向浏览器反馈处理结果信息;
步骤313、服务器释放数据通道。
本发明实施例中,当浏览器发起的请求实现是基于Http技术的,则可免除部署时 防火墙、代理服务器等问题的困扰;此外,采用纯Http技术实现,可以不受操作系统,浏览 器以及其他浏览器插件的限制,适用范围非常广泛;在单个浏览器只能使用2个Http请求 的前提下,提供了最近似C/S模式的实时响应度。
服务器推动数据时,数据的传递方式可以为xml或Json或文本模式。
本发明实施例在具体实现时,对设计开发语言并无具体限定,可以采用Java语 言,也可采用其他的语言形式。
相应上述服务器主动推送数据的方法实施例,本发明实施例还提供了 一种服务器 主动推送数据的系统,如图4所示,所述系统包括浏览器401和服务器402 ;其中,
所述浏览器401,用于发起注册请求,以连接服务器402并接受所述服务器402主 动推送的数据,并在所述浏览器401与服务器402之间建立用于传输主动推送的数据的数 据通道之后,发起订阅请求,所述订阅请求包含订阅数据的类型参数以及表示订阅内容的 标识;
所述服务器402,用于在所述浏览器401注册成功后,在所述浏览器401与服务器 402之间建立所述数据通道,并根据所述订阅请求,通过所述数据通道,向所述浏览器401 主动推送相应数据。
本发明实施例提供了一种基于请求模式且不依赖其他第三方框架或插件的服务器与浏览器的主动推模式的应用框架,当浏览器建立与服务器的连接之后,服务器建立处 于浏览器与服务器之间建立用于传输主动推送的数据的数据通道,服务器能够通过该数据 通道,根据浏览器的订阅请求,向浏览器主动推送相应数据,可见,服务器能够根据浏览器 的订阅请求进行数据的主动推送,因此,不需浏览器采用前台轮询的方式判断是否有主动 推送的数据,可最大程度减少服务器连接的占用,从而提高应用系统的并发度,减少服务器 的性能消耗。
根据httpl. 1规范的规定,客户端与服务器之间建立的Http连接不能超过两个, 出现的两个以上的新的连接会被阻塞。本发明实施例中,客户端与服务器之间建立的Http 连接有两个,本发明实施例中将两个可用Http连接分别划分为显式连接(explicit)和隐 式连接(implicit)。显式连接用来发送有逻辑含义的注册请求及订阅请求。上述两种请求 中,显式请求不需在服务器被保持(hold),即对显示请求处理的线程执行挂起操作。对于 订阅请求来说,仅仅是将订阅请求中携带的订阅数据的类型参数以及表示订阅内容的标识 信息保存在订阅队列中,然后立即返回,这就可以保证显式连接的灵活性。而隐式请求用来 发送建立数据通道请求,它不包含任何逻辑含义。服务器将数据通道请求hold起来,并不 返回,一旦有数据需要推送,就将返回数据写入该数据通道,完成推送,然后将数据通道释 放。当浏览器获知数据通道被释放后,即立刻再次发起隐式连接请求,将推动数据的主动权 重新交给服务器。
需要说明的是,当所述数据通道建立之后,所述浏览器还用于向服务器发送周期 性心跳信息,以表示所述浏览器与服务器之间的持续连接。
此外,当需要将多条数据同时推送至所述浏览器时,所述服务器还用于将所述多 条数据进行串行化处理,通过所述数据通道,将经过串行化处理后的数据按顺序依次推送 至所述浏览器。
服务器推动数据时,数据的传递方式可以为xml或Json或文本模式,通过所述数 据通道向所述浏览器主动推送。当所述浏览器请求断开与服务器的连接时,所述服务器还 用于取消所述数据通道。
上述系统实施例由于与前述方法实施例相对应,因此不做赘述,相关内容可以参 见方法实施例中的详细描述。
以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可 以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单 元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其 中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性 劳动的情况下,即可以理解并实施。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明实施例的精神或范围的情况下,在其它实施例中实现。因此, 本发明实施例将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和 新颖特点相一致的最宽的范围。
权利要求
1.一种服务器主动推送数据的方法,其特征在于,所述方法包括浏览器发起注册请求,以连接服务器并接受所述服务器主动推送的数据,在所述浏览 器注册成功后,所述浏览器与服务器之间建立用于传输主动推送的数据的数据通道;所述浏览器发起订阅请求,所述订阅请求包含订阅数据的类型参数以及表示订阅内容 的标识;所述服务器根据所述订阅请求,通过所述数据通道,向所述浏览器主动推送相应数据。
2.根据权利要求1所述的服务器主动推送数据的方法,其特征在于,当所述数据通道 建立之后,所述方法还包括所述浏览器向服务器发送周期性心跳信息,以表示所述浏览器与服务器之间的持续连接。
3.根据权利要求1所述的服务器主动推送数据的方法,其特征在于,当需要将多条数 据同时推送至所述浏览器时,所述方法还包括将所述多条数据进行串行化处理,通过所述数据通道,将经过串行化处理后的数据按 顺序依次推送至所述浏览器。
4.根据权利要求1所述的服务器主动推送数据的方法,其特征在于,所述服务器根据 所述订阅请求,通过所述数据通道,向所述浏览器主动推送相应数据,具体包括所述服务器根据所述订阅请求,将相应数据转化为xml或Json或文本模式,通过所述 数据通道向所述浏览器主动推送。
5.根据权利要求1-4中任一项所述的服务器主动推送数据的方法,其特征在于,所述 方法还包括当所述浏览器请求断开与服务器的连接时,所述数据通道被取消。
6.一种服务器主动推送数据的系统,其特征在于,所述系统包括浏览器和服务器;其中,所述浏览器,用于发起注册请求,以连接服务器并接受所述服务器主动推送的数据, 并在所述浏览器与服务器之间建立用于传输主动推送的数据的数据通道之后,发起订阅请 求,所述订阅请求包含订阅数据的类型参数以及表示订阅内容的标识;所述服务器,用于在所述浏览器注册成功后,在所述浏览器与服务器之间建立所述数 据通道,并根据所述订阅请求,通过所述数据通道,向所述浏览器主动推送相应数据。
7.根据权利要求6所述的服务器主动推送数据的系统,其特征在于,当所述数据通道 建立之后,所述浏览器还用于向服务器发送周期性心跳信息,以表示所述浏览器与服务器 之间的持续连接。
8.根据权利要求6所述的服务器主动推送数据的系统,其特征在于,当需要将多条数 据同时推送至所述浏览器时,所述服务器还用于将所述多条数据进行串行化处理,通过所述数据通道,将经过串行化处理后的数据按 顺序依次推送至所述浏览器。
9.根据权利要求6所述的服务器主动推送数据的系统,其特征在于,所述服务器还用 于根据所述订阅请求,将相应数据转化为xml或Json或文本模式,通过所述数据通道向所 述浏览器主动推送。
10.根据权利要求6-9中任一项所述的服务器主动推送数据的系统,其特征在于,当所述浏览器请求断开与服务器的连接时,所述服务器还用于取消所述数据通道。
全文摘要
本发明公开了一种服务器主动推送数据的方法和系统,其中,所述方法具体包括浏览器发起注册请求,以连接服务器并接受所述服务器主动推送的数据,在所述浏览器注册成功后,所述浏览器与服务器之间建立用于传输主动推送的数据的数据通道;所述浏览器发起订阅请求,所述订阅请求包含订阅数据的类型参数以及表示订阅内容的标识;所述服务器根据所述订阅请求,通过所述数据通道,向所述浏览器主动推送相应数据。通过本发明,可以满足对浏览器实时推送数据的要求,并且能够提高应用系统的并发度,减少服务器的性能消耗。
文档编号G06F17/30GK102035893SQ201010603239
公开日2011年4月27日 申请日期2010年12月23日 优先权日2010年12月23日
发明者丁医, 冉丁, 吴可嘉 申请人:中国农业银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1