本文地址:http://hi.baidu.com/zhumulangma/blog/item/d2de82d4a1bf8208a08bb73e.html
Pushlet工作流程分析时采用从前台页面请求到后台程序响应,后台程序执行流程,最后前台对响应请求。分析对象是ajax-pushlet-client客户端。分析工具借助了firebug。
1)页面加载时,调用PL._addEvent(window, 'load', PL._init, false),其本质是调用了window.onload=PL._init(),即获取XMLHttpRequest对象,设定pushlet的请求URL为pushlet.srv,将状态置为STATE_READY。
2)通过某种方式调用了joinListen(aSubject),加入、监听、并订阅(subscribe),这里的aSubject和subscrible是“/pushlet/ping”,构造好query,然后调用PL._doRequest('join-listen', query),这时的query是值为“p_format=xml-strict&p_mode=pull&p_subject=/pushlet/ping”。参数含义:
p_format:响应格式,这里指严格的xml;
p_mode:pushlet模式;
p_subject:请求主题。
3)是否等待状态准备好(waitForState)为false,即可以直接进行请求,其原因是在初始化时已将状态设置为STATE_READY了,向服务器端发出请求,利用GET请求,URL为“../../pushlet.srv?p_event=join-listen&p_format=xml-strict&p_mode=pull&p_subject=/pushlet/ping”。参数补充说明:p_event,即请求事件类型,这里为“join-listen”;而pushlet.srv是pushlet servlet配置地址,在web.xml中指明。
4)第一次以GET方式请求:
GET 方式请求:
eventType=join-listen
p_subject=/pushlet/ping
p_format=xml-strict
p_mode=pull
p_event=join-listen
创建一个Session 设置userAgent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
创建一个Command实例:包括一个Session,事件Event,HTTP Servlet请求,HTTP Servlet响应
处理来自客户端的servlet请求
不同事件决定不同的操作
先请求加入
加入操作
Pushlet[INFO] SessionManager: Sun Jun 14 20:48:55 CST 2009 sapeledowe at 127.0.0.1 added
取得返回格式,默认值为js
实际值为xml-strict
新建响应事件,类型为join-ack
响应事件P_ID=sapeledowe
响应事件P_FORMAT=xml-strict
Pushlet[INFO] S-127.0.0.1[sapeledowe]: [Controller] joined
如果返回事件不是nack,再请求监听
请求监听操作
获取一个订阅者,设置主题=/pushlet/ping 标签=null
Pushlet[INFO] S-127.0.0.1[sapeledowe]: [Subscriber] Subscription added subject=/pushlet/ping sid=vusos label=null
Pushlet[INFO] S-127.0.0.1[sapeledowe]: [Controller] Listening mode=pull userAgent=mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9.0.10) gecko/2009042316 firefox/3.0.10
如果监听返回事件不是nack,则设置响应事件类型为join-listen-ack
响应事件类型为listen 或者 refresh
获得订阅者
从队列中获取事件,并推送至客户端
设置响应URL=/blchat/pushlet.srv?p_id=sapeledowe&p_event=refresh
发送 刷新事件 到客户端
设置响应事件的属性
通过客户端适配器推送给客户端
响应事件:
p_event=join-listen-ack
p_mode=pull
p_time=1244995572
p_id=sebocegebi
p_format=xml-strict
p_sid=nehon
p_event=refresh
p_time=1244995572
p_wait=5888
p_url=/blchat/pushlet.srv?p_id=sebocegebi&p_event=refresh
第二次请求:
GET 方式 eventType=refresh
p_id=sapeledowe
p_event=refresh
创建一个Command实例:包括一个Session,事件Event,HTTP Servlet请求,HTTP Servlet响应
处理来自客户端的servlet请求
不同事件决定不同的操作
响应事件类型为listen 或者 refresh
获得订阅者
从队列中获取事件,并推送至客户端
设置响应URL=/blchat/pushlet.srv?p_id=sapeledowe&p_event=refresh
发送 刷新事件 到客户端
设置响应事件的属性
通过客户端适配器推送给客户端
结论:
1、第一次请求后建立一个服务器端长久的session,同时创建一个对应的subscribe一个controller,并将他们与session关联。
2、系统中Event是怎么产生的:系统中产生的EVENT是来源于系统自带的几个产生线程。TestEventPullSources中有几个静态内部内,它们在系统初始化的时候就自动创建了。系统通过Dispatcher类将事件分发到各个Session工厂中各个Session中,分别加入到各自的Subscribe的EventQueue中去。
3、servlet取得reflesh操作请求后重新读取队列中的事件,然后将其转换为XML输出到前台,最后再输出一个“reflesh”事件。响应事件对应了JavaScript里相应的对象。“reflesh”事件导致再次请求服务器,不过这一次不再创建session,而是根据sessionId直接取得服务器端实例,然后再获取事件队列中的事件,如此循环。
5、退出时,停止session,移去所有的subscriptions,设置响应事件为“E_LEAVE_ACK”,并将其作为控制类事件发送到客户端。
后面将对Pushlet源代码中的设计模式和二次开发过程进行分析。
分享到:
相关推荐
通过查看源码,你可以理解Pushlet的工作流程,包括服务器端的`PushletServlet`、`PushletSession`等关键类,以及客户端如何使用`PushletClient`建立连接并注册订阅。 五、工具应用 在实际开发中,Pushlet可以与...
本文将深入分析Pushlet 2.0.3的服务器端源码,了解其架构、工作原理及关键实现。 **总体架构** Pushlet 的架构主要包括服务器端和客户端两部分。服务器端基于Servlet技术,负责监听客户端请求,并通过不同的adapter...
NV_P_FORMAT和NV_P_MODE定义了数据格式和Pushlet的工作模式。前者默认为'p_format=xml-strict',表明数据以严格的XML格式传输,后者默认为'p_mode=pull',表示Pushlet采用的是拉取模式。pushletURL、webRoot和...
3. Pushlet工作流程: - 客户端通过Applet与Pushlet Server建立连接。 - 服务器端保存连接,并将其放入等待队列。 - 当服务器端有新的消息需要发送时,会找到对应的连接并发送数据。 - 客户端收到数据后进行处理,...
Pushlet的核心组件是Pushlet Server和Pushlet Client。Pushlet Server作为服务端,接收并处理客户端的连接,当有新的数据可用时,会主动将数据推送到已经建立连接的客户端。Pushlet Client则是在用户端运行的程序,...
服务器推 pushlet 服务器推 pushlet 服务器推 pushlet 服务器推 pushlet
Pushlet的工作原理是基于HTTP长连接,通过保持客户端和服务器之间的持久连接,服务器可以在数据准备好时立即推送到客户端,而无需等待客户端的下一次请求。这种机制在网络应用中特别适用于股票报价、实时聊天、在线...
分析这个文件可以帮助你更好地理解和使用Pushlet框架,例如,你可以找到服务器如何处理推送事件,客户端如何建立连接,以及如何调试和解决问题的线索。 总之,Pushlet作为Comet的一种实现,提供了高效且灵活的...
通过下载和分析提供的源代码,你可以深入理解Pushlet的内部机制,并根据需求进行自定义开发,例如增加群聊功能、表情支持、文件传输等。 总之,Pushlet技术为实时通信提供了一种高效且灵活的解决方案,特别适合需要...
- **Pushlet的二次开发**:《(zt)Pushlet的二次开发(二).htm》和《(zt)Pushlet的二次开发(三).htm》是关于如何扩展和定制Pushlet的教程,涵盖了可能遇到的问题和解决方案,为有经验的开发者提供了进一步的实践指导...
3. **Pushlet的工作流程** - 客户端打开一个带有Pushlet URL的页面,这会导致浏览器向服务器发起一个HTTP请求。 - 服务器接收到请求后,创建一个Pushlet实例,保持连接开放,等待数据推送。 - 当服务器端有新的...
"pushlet.jar 和示例工程"是一个专注于实现服务器端向客户端主动推送消息的框架,它在Web开发领域中扮演着重要角色。Pushlet框架的设计旨在克服传统的HTTP协议中客户端请求、服务器响应的被动通信模式,转而采用一种...
首先,我们要理解Pushlet的基本工作原理。Pushlet使用了HTTP长连接(Persistent HTTP Connections)和 Comet 模型。Comet模型是一种处理服务器向浏览器推送数据的技术,它通过保持一个开放的HTTP连接直到有新的数据...
2. **Pushlet白皮书**:这是一份关于Pushlet的详细介绍文档,可能涵盖了其设计原则、工作原理、使用方法以及优点等内容。白皮书分为英文版和中文版,方便不同语言背景的读者理解。 3. **源码分析**:"pushlet 2.0.3...
通过这个小例子,你可以直观地了解Pushlet框架的工作流程,并学习如何在自己的项目中集成和使用Pushlet。 **总结** Pushlet框架为Java开发者提供了一种实现服务器到客户端实时数据推送的有效工具,通过克服HTTP的...
【Pushlet服务器推技术】是一种实时通信技术,主要用于构建能够实时推送信息的Web应用程序,比如聊天、股票更新、在线游戏等场景。Pushlet是基于Java的开源项目,它利用了HTTP的长连接特性,实现了服务器主动向...
开发者可以通过阅读源码了解其工作原理,参考示例快速入门,通过配置文件定制Pushlet Server的行为。 总的来说,Comet框架的Pushlet实现是一种高效的服务器推送技术,它通过持久化连接解决了传统Web应用实时性不强...
PushLet是一种基于Java的实时推送技术,用于在服务器和客户端之间进行双向通信,尤其是在Web应用中实现数据的即时更新。这个实例"PushLet实例,可直接运行"提供了一个完整的、可以直接执行的PushLet项目,包括必要的...
首先,我们需要了解PUSHLET的基本工作原理。传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器返回响应。但在PUSHLET中,服务器可以在客户端打开一个持久连接后,通过这个连接主动发送数据,实现"推...