专利名称:一种基于浏览器获取服务器动态数据的方法及装置的制作方法
技术领域:
本发明具体涉及一种基于浏览器获取服务器动态数据的方法及装置。
背景技术:
使用异步JavaScript和XML ( AJAX)开发出的基于浏览器的、具有高用 户交互性的、几乎不易觉察到延迟的web应用,能够4艮好地满足消息传输时间 不确定的web应用,如基于网页的文字聊天应用的需求。
由于实时的动态数据比如新闻标题、证券报价和拍卖行情都需要尽快地发 送给用户,但是,AJAX因受限于HTTP协议请求/。向应架构,所以,服务器不 能推送实时动态的数据。
目前,已知的基于浏览器获取服务器动态数据的方法有HTTP拉取方法、 HTTP流方法、反转AJAX方法和长时间轮询方法,其中,在HTTP拉取方法中, 浏览器以可以由用户定义的时间间隔检查服务器上的最新动态数据;在HTTP 流方法中,HTTP流由存在于不间断的HTTP连接响应中或某个XMLHttpRequest 连接中的服务器动态数据流组成,在这个连续的流中定时发送服务器的动态数 据给浏览器;在反转AJAX方法中,根据HTTP的持续连接特性,,除非服务器或 浏览器的某一方发送了 一条明显的关闭连接的消息,或者有超时以及网络错误 发生,否则,服务器和浏览器之间的传输控制协议(TCP)会一直保持连接状 态,服务器有事件要通知浏览器时,可以随时通过此连接发送与事件相关的动 态数据;长时间轮询方法,也就是所谓的异步轮询,浏览器和服务器间的连接 会保持打开状态,并保持一段预定义好的时间,如果预定义时间超时且服务器 没有事件发生,服务器就会请求浏览器重新进行异步连接,如果预定义时间内 有事件发生,服务器会发送动态数据到浏览器,然后由浏览器重新进行连接。上述现有基于浏览器获取服务器动态数据的方法中,HTTP拉取方法的拉取 频率要足够高才能保证较高的动态数据精确度,但是,高频率可能会导致多余 的检查,从而导致较高的网络流量,而低频率则会导致错过更新的动态数据。 理想地,拉取的时间间隔应该等于服务器状态改变的速度,但实际上很多应用 无法满足这个要求。HTTP流方法、反转AJAX方法和长时间轮询方法的本质都 差不多,都是利用HTTP的连接保持这一特性,虽然,服务器与浏览器间保持长 连接可以及时传送动态数据,但是,服务器与浏览器间保持长连接会造成系统 资源浪费,即降低服务器的并发连接数。
发明内容
有鉴于此,本发明的主要目的在于提供一种基于浏览器获取服务器动态数 据的方法及装置,能够有效地提高获取服务器动态数据的效率、保证服务器的 并发连接数。
为达到上述目的,本发明的技术方案是这样实现的 一种基于浏览器获取服务器动态数据的方法,该方法包括
a、 浏览器创建回调对象,并判断浏览器所属客户机的IP地址是否为公网 地址,如果是,执行步骤d;否则,执行步骤b;
b、 判断服务器的IP地址是否为公网地址,如果是,执行步骤c;否则,执 行步骤d;
c、 判断网关是否支持通用即插即用设备UPnP,如果是,执行步骤d;否 则,创建端口失败,结束当前流程;
d、 浏览器打开一个端口,服务器有事件需要通知浏览器时,通过所述端口 发送与所述事件相关的动态数据给回调对象,再由回调对象处理收到的动态数 据。
步骤a所述浏览器创建回调对象为
al、浏览器向服务器请求异步JavaScript和XML AJAX页面; a2、服务器向浏览器返回携带JavaScript代码的AJAX页面;a3、浏览器通过执行JavaScript代码创建回调对象。
所述回调对象的创建参数中包含JavaScript回调函数名;步骤d所述回调 对象处理收到的动态数据为回调对象根据所述JavaScript回调函数名调用 JavaScript回调函数处理动态数据。
步骤d所述浏览器打开一个端口之后包含步骤浏览器将所述端口的端口 号发送给服务器,服务器保存端口号后,向浏览器返回保存成功消息;所述通 过端口发送为服务器查找浏览器所对应的端口号,建立与所述端口号对应端 口的连接后,通过所述端口发送与所述事件相关的动态数据给回调对象。
所述浏览器所属客户机的IP地址为公网地址;所述端口号为客户机本机的 端口号。
所述服务器的IP地址为公网地址、浏览器所属客户机的IP地址为私网地 址、且网关支持通用即插即用设备UPnP;所述端口号为网关映射的端口号。
所述客户机和服务器的IP地址都是私网地址;所述端口号为客户机本机的 端口号。
所述端口为传输控制协议TCP端口或管理用户数据报协议UDP端口 。 回调对象处理收到的动态数据为回调对象获得浏览器容器的句柄;根据
所述浏览器容器的句柄调用浏览器容器的获取文档接口;从文档接口中获得脚
本对象;调用脚本对象的Invoke方法执行JavaScript脚本函数;JavaScript函数
根据动态数据所描述事件的类型作相应处理。
一种基于浏览器获取服务器动态数据的装置,该装置包括浏览器和服务器,
其中,
所述浏览器用于向服务器请求AJAX页面;通过执行服务器返回的AJAX 页面所携带JavaScript代码创建回调对象并打开端口 ;将所述端口的端口号上 报服务器;以及处理服务器发送的与事件相关的动态数据;
所述服务器用于向浏览器提供携带JavaScript代码的AJAX页面;存储浏 览器上报的端口号;有事件通知浏览器时,通过浏览器指定的端口发送与事件 相关的动态数据给浏览器。本发明提出的基于浏览器获取服务器动态数据的方法及装置,在浏览器访 问服务器时,创建回调对象并打开一个端口,服务器有事件通知客户端时,则
通过指定的端口向回调对象发送与所述事件相关的动态凝:据,再由回调对象调 用JavaScript回调函数对收到的动态数据进行处理。采用本发明基于浏览器获 取服务器动态数据的方法及装置,服务器与浏览器之间不用保持长连接,所以, 能够有效地提高获取服务器动态数据的效率、保证服务器的并发连接数。
图1为本发明基于浏览器获取服务器动态数据的方法流程图。
具体实施例方式
本发明的基本思想是在浏览器访问服务器时,创建回调对象并打开一个 端口,服务器有事件通知客户端时,则通过指定的端口向回调对象发送与所述 事件相关的动态数据,再由回调对象调用JavaScript回调函数对收到的动态数 据进行处理。下面结合具体实施例及附图对本发明作进一步详细说明。
图1为本发明基于浏览器获取服务器动态数据的方法流程图,如图1所示, 本发明基于浏览器获取服务器动态数据的方法主要包括以下步骤
步骤101:浏览器向服务器请求AJAX页面。
这里,用户根据实际需要向服务器请求AJAX页面,即所述AJAX页面为
含有特定功能的AJAX页面,如关于股票实时信息的页面。
步骤102:服务器向浏览器返回携带JavaScript代码的AJAX页面。
这里,AJAX页面中都会使用JavaScript代码,功能不同的页面,其JavaScript
代码完成的功能也不同,但是,即使功能不同的页面,其JavaScript代码也都
必需具备创建回调对象、获取回调端口的功能。
步骤103:浏览器通过执行JavaScript代码创建回调对象。 回调对象的创建参数中会包括JavaScript回调函数名, 一段典型的回调对
象创建代码如下cal旧ackObj = fimction(){
return new ActiveXObject("Callback");
Var port = callBackObj.getPort(); If(port != 0)
〃创建成功
callBackObj.setCallBack(receiveServerMsg);
〃通知服务器客户端的回调端口,代码省略
Else
〃无法-使用回调对象
〃采用传统的轮询方式获取服务器上的更新信息。
其中,receiveServerMsg即为 一个JavaScript回调函数。
步骤104:判断浏览器所属客户机的IP地址是否为公网地址,如果是,执 行步骤107;否则,执行步骤105。
这里,浏览器根据客户机的IP地址可以直接确定其为公网地址或私网地 址。客户机的IP地址为公网地址的情况下,无论服务器的IP地址为公网地址 还是私网地址,处理流程是相同的,因为,客户机的IP地址为公网地址的情况 下,如果服务器的IP地址为私网地址,则其所在的网关一般会进行一个地址/ 端口映射,把服务器地址/端口对应到公网地址/端口 ,即客户机的IP地址为公 网地址、服务器的IP地址为私网地址的情况会转换为客户机的IP地址为公网 地址、服务器的IP地址为公网地址的情况。
步骤105:判断服务器的IP地址是否为公网地址,如果是,执行步骤106; 否则执行步骤107。步骤106:判断网关是否支持通用即插即用设备(UPnP),如果是,执行步 骤107;否则,执行步骤112,创建端口失败。
这里,回调对象可以利用UPnP发现协议查找是否有支持UPnP的网关, 从而判断网关是否支持UPnP。
步骤107:浏览器打开一个端口,并将所述端口的端口号X发送给服务器。
这里,如果服务器的IP地址为公网地址、客户机的IP地址是私网地址、 且网关支持UPnP,则发送给服务器的端口号X为网关映射的端口号;如果客 户机的IP地址为公网地址,则发送给服务器的端口号X为客户机本机的端口 号;如果客户机和服务器的IP地址都是私网地址,则发送给服务器的端口号X 为客户机本机的端口号。
浏览器可以通过AJAX的XMLHttpRequest对象发送端口号给服务器。 步骤108:服务器保存端口号X,并向浏览器返回保存成功消息。 一般情况下,服务器会为每一个客户端对应一个会话对象,用于保存用户
相关信息,如用户名称、是否登录、用户权限等,所以,服务器收到端口号后,
也会将端口号X保存在客户端对应的会话对象中。
步骤109:服务器有事件需要通知浏览器时,获取对应的端口号X,并连
接所述端口号X对应的端口 。
步骤110:服务器通过步骤109所述端口发送与事件相关的动态数据给回
调对象。
这里,服务器一般将事件用JavaScript对象表示法(JSon )或XML进行编 码,然后再与客户机连接,并发送动态数据。
步骤111:回调对象调用JavaScript回调函^t处理动态数据。 这里,回调对象根据JavaScript回调函数名调用JavaScript回调函数处理动 态数据,具体可以包含以下步骤回调对象获得浏览器容器的句柄;根据所述 浏览器容器的句柄调用浏览器容器的获取文档接口 ;从文档接口中获得脚本对 象;调用脚本对象的Invoke方法执行JavaScript脚本函数;JavaScript函数根据 动态数据所描述事件的类型作相应处理。例如,在基于网页的聊天系统中,如果回调对象收到的动态数据描述的事
件是好友上下线,则作相应处理为浏览器更新好友状态;如果回调对象收到 的动态数据描述的事件是好友发送了新消息,则作相应处理为显示新消息; 如果回调对象收到的动态数据描述的事件是请求事件,则作相应处理为提示 用户是否接受请求。
步骤112:创建端口失败。
本发明适用于客户机的IP地址为公网地址,或者客户机和服务器的IP地 址均为私网地址,或者客户机的IP地址为私网地址、服务器的IP地址为公网 地址、且网关支持UPnP的情况,即本发明不适用于客户机的IP地址为私网地 址、服务器的IP地址为公网地址、且网关不支持UPnP的情况,这种情况下, 也可以选择传统的定时轮询等方式获取服务器动态数据。
本发明基于浏览器获取服务器动态数据的装置包括浏览器和服务器,其中,
浏览器用于向服务器请求AJAX页面;通过执行服务器返回的AJAX页面 所携带JavaScript代码创建回调对象并打开端口 ;将所述端口的端口号上报服 务器;以及处理服务器发送的与事件相关的动态数据;
服务器用于向浏览器提供携带JavaScript代码的AJAX页面;存储浏览器 上报的端口号;有事件通知浏览器时,通过浏览器指定的端口发送与事件相关 的动态数据给浏览器。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种基于浏览器获取服务器动态数据的方法,其特征在于,该方法包括a、浏览器创建回调对象,并判断浏览器所属客户机的IP地址是否为公网地址,如果是,执行步骤d;否则,执行步骤b;b、判断服务器的IP地址是否为公网地址,如果是,执行步骤c;否则,执行步骤d;c、判断网关是否支持通用即插即用设备UPnP,如果是,执行步骤d;否则,创建端口失败,结束当前流程;d、浏览器打开一个端口,服务器有事件需要通知浏览器时,通过所述端口发送与所述事件相关的动态数据给回调对象,再由回调对象处理收到的动态数据。
2、 根据权利要求1所述的方法,其特征在于,步骤a所述浏览器创建回调 对象为al、浏览器向服务器请求异步JavaScript和XMLAJAX页面; a2、服务器向浏览器返回携带JavaScript代码的AJAX页面; a3、浏览器通过执行JavaScript代码创建回调对象。
3、 根据权利要求l所述的方法,其特征在于,所述回调对象的创建参数中 包含JavaScript回调函数名;步骤d所述回调对象处理收到的动态数据为回 调对象根据所述JavaScript回调函数名调用JavaScript回调函数处理动态数据。
4、 根据权利要求1所述的方法,其特征在于,步骤d所述浏览器打开一个 端口之后包含步骤浏览器将所述端口的端口号发送给力l务器,服务器保存端 口号后,向浏览器返回保存成功消息;所述通过端口发送为服务器查找浏览 器所对应的端口号,建立与所述端口号对应端口的连接后,通过所述端口发送 与所述事件相关的动态数据给回调对象。
5、 根据权利要求4所述的方法,其特征在于,所述浏览器所属客户机的IP 地址为7>网地址;所述端口号为客户才几本机的端口号。
6、 根据权利要求4所述的方法,其特征在于,所述服务器的IP地址为公 网地址、浏览器所属客户机的IP地址为私网地址、且网关支持通用即插即用设 备UPnP;所述端口号为网关映射的端口号。
7、 根据权利要求4所述的方法,其特征在于,所述客户机和服务器的IP 地址都是私网地址;所述端口号为客户才几本才几的端口号。
8、 根据权利要求1至7任一所述的方法,其特征在于,所述端口为传输控 制协议TCP端口或管理用户数据才艮协议UDP端口 。
9、 根据权利要求l或3所述的方法,其特征在于,回调对象处理收到的动 态数据为回调对象获得浏览器容器的句柄;根据所述浏览器容器的句柄调用 浏览器容器的获取文档接口;从文档接口中获得脚本对象;调用脚本对象的 Invoke方法执行JavaScript脚本函数;JavaScript函数根据动态数据所描述事件 的类型作相应处理。
10、 一种基于浏览器获取服务器动态数据的装置,其特征在于,该装置包 括浏览器和服务器,其中,所述浏览器用于向服务器请求AJAX页面;通过执行服务器返回的AJAX 页面所携带JavaScript代码创建回调对象并打开端口;将所述端口的端口号上 报服务器;以及处理服务器发送的与事件相关的动态数据;所述服务器用于向浏览器提供携带JavaScript代码的AJAX页面;存储浏 览器上报的端口号;有事件通知浏览器时,通过浏览器指定的端口发送与事件 相关的动态数据给浏览器。
全文摘要
本发明公开一种基于浏览器获取服务器动态数据的方法,包括浏览器创建回调对象,并打开一个端口;服务器有事件需要通知浏览器时,通过所述端口发送与事件相关的动态数据给回调对象;回调对象再调用JavaScript回调函数处理收到的动态数据。本发明还提出一种基于浏览器获取服务器动态数据的装置,该装置包括浏览器和服务器,其中,浏览器主要用于创建回调对象并打开端口,以及处理服务器发送的与事件相关的动态数据。采用本发明提出的基于浏览器获取服务器动态数据的方法及装置,服务器与浏览器之间不用一直保持连接状态,所以,能够有效地提高获取服务器动态数据的效率、保证服务器的并发连接数。
文档编号H04L29/06GK101291335SQ20081012690
公开日2008年10月22日 申请日期2008年6月13日 优先权日2008年6月13日
发明者平 江, 琼 程, 金晓静 申请人:中兴通讯股份有限公司