`

pushlet工作流程分析与研究

阅读更多

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使用手把手实例

    通过查看源码,你可以理解Pushlet的工作流程,包括服务器端的`PushletServlet`、`PushletSession`等关键类,以及客户端如何使用`PushletClient`建立连接并注册订阅。 五、工具应用 在实际开发中,Pushlet可以与...

    pushlet

    Pushlet Client则是在用户端运行的程序,它负责与服务器建立持久连接,并接收服务器推送过来的数据。 Pushlet 2.0.3是该技术的一个特定版本,可能包含以下关键特性: 1. **持久连接**:通过保持一个开放的HTTP连接...

    Pushlet的Ajax-pushlet-client.js分析

    NV_P_FORMAT和NV_P_MODE定义了数据格式和Pushlet的工作模式。前者默认为'p_format=xml-strict',表明数据以严格的XML格式传输,后者默认为'p_mode=pull',表示Pushlet采用的是拉取模式。pushletURL、webRoot和...

    pushlet_2.0.3_源码分析_服务器端__

    本文将深入分析Pushlet 2.0.3的服务器端源码,了解其架构、工作原理及关键实现。 **总体架构** Pushlet 的架构主要包括服务器端和客户端两部分。服务器端基于Servlet技术,负责监听客户端请求,并通过不同的adapter...

    pushlet 之 官方示例解读与改造

    《Pushlet官方示例解读与改造》 Pushlet是一种基于HTTP长轮询技术的...在实践过程中,理解HTTP长轮询的工作原理,熟悉服务器端和客户端的交互流程,以及掌握如何优化和扩展Pushlet,都将对提升我们的IT技能大有裨益。

    pushlet jar包下载

    服务器推 pushlet 服务器推 pushlet 服务器推 pushlet 服务器推 pushlet

    pushlet简单配置应用

    Servlet映射到`/pushlet.srv`路径,这是客户端与服务器交互的默认URL。如果更改此URL,记得同时更新客户端JavaScript代码中的相应引用。 5. **客户端JavaScript使用**:在HTML页面中,你需要引入`ajax-pushlet-...

    pushlet实现简单的用户聊天

    Pushlet Client则运行在用户的浏览器或应用程序中,用于建立与服务器的持久连接,并接收来自服务器的消息。 首先,要理解Pushlet的工作原理。当客户端(例如,一个Web浏览器)与Pushlet Server建立连接后,服务器会...

    服务器推送pushlet讲解

    2. Pushlet客户端:通常是一个JavaScript或Java小程序,它连接到Pushlet服务器并接收推送的数据。客户端可以订阅特定的事件,当这些事件发生时,服务器会将数据推送到客户端。 3. Pushlet事件:这些是服务器和客户端...

    pushlet.jar 和示例工程

    它提供了一个服务端的Pushlet Server,以及可以集成到客户端应用程序的Pushlet Client API。Pushlet Server处理与客户端的持久连接,并负责将消息队列中的数据推送到各个连接的客户端。Pushlet Client API则允许...

    pushlet框架做的小例子

    通过这个小例子,你可以直观地了解Pushlet框架的工作流程,并学习如何在自己的项目中集成和使用Pushlet。 **总结** Pushlet框架为Java开发者提供了一种实现服务器到客户端实时数据推送的有效工具,通过克服HTTP的...

    基于Pushlet推技术的网络应用程序开发的研究

    【基于Pushlet推技术的网络应用程序开发的研究】这篇论文探讨了Pushlet技术在构建网络应用程序中的应用,Pushlet是一种服务器推(Server Push)技术,它允许服务器主动地将实时更新的数据推送到客户端的浏览器,而...

    Pushlet简单示例测试

    2. **Pushlet客户端**:客户端通常是一个Web应用,使用JavaScript或者其他客户端技术与Pushlet服务器建立持久连接。当接收到服务器推送的数据时,客户端会更新显示或者执行相应的操作。 3. **事件生成器**:在...

    pushlet的JAR包和文档

    【Pushlet的JAR包和文档】是一组与实时通信技术相关的资源,主要涉及Pushlet项目,这是一种基于Java实现的Comet风格的Web应用工具。Pushlet是早期实现服务器推送(Server-Side Push)技术的一个重要框架,它利用HTTP...

    pushlet服务器推技术例子

    【Pushlet服务器推技术】是一种实时通信技术,主要用于构建能够实时推送信息的Web应用程序,比如聊天、股票更新、在线游戏等场景。Pushlet是基于Java的开源项目,它利用了HTTP的长连接特性,实现了服务器主动向...

    pushlet例子

    3. **Pushlet的工作流程** - 客户端打开一个带有Pushlet URL的页面,这会导致浏览器向服务器发起一个HTTP请求。 - 服务器接收到请求后,创建一个Pushlet实例,保持连接开放,等待数据推送。 - 当服务器端有新的...

    pushlet-UserUnicast

    2. **Pushlet框架**:深入研究Pushlet框架的架构和工作流程,了解它如何处理连接、订阅和发布事件,以及如何支持多线程和并发。 3. **Java编程**:由于Pushlet是用Java编写的,因此掌握基本的Java语法和面向对象...

    pushlet实例以及jar

    2. **研究源码**:查看提供的Pushlet实例代码,了解其工作原理和关键实现。这可能包括服务器端的Pushlet服务、客户端的订阅逻辑等。 3. **理解API**:深入研究jar文件中的API文档,了解如何初始化Pushlet客户端和...

    comet 框架 之 pushlet

    开发者可以通过阅读源码了解其工作原理,参考示例快速入门,通过配置文件定制Pushlet Server的行为。 总的来说,Comet框架的Pushlet实现是一种高效的服务器推送技术,它通过持久化连接解决了传统Web应用实时性不强...

Global site tag (gtag.js) - Google Analytics