`

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_2.0.3_源码分析_服务器端__

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

    pushlet 之 Pushlet使用手把手实例

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

    pushlet实现简单的用户聊天

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

    服务器推送pushlet讲解

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

    pushlet的JAR包和文档

    2. **Pushlet白皮书**:这是一份关于Pushlet的详细介绍文档,可能涵盖了其设计原则、工作原理、使用方法以及优点等内容。白皮书分为英文版和中文版,方便不同语言背景的读者理解。 3. **源码分析**:"pushlet 2.0.3...

    服务器推送——PushLet的应用<一>

    本文将深入探讨一种名为PushLet的服务器推送框架,并通过源码分析,揭示其工作原理与应用。 PushLet是一个轻量级的Java服务器推送框架,它基于HTTP长连接,利用了HTTP 1.1的Keep-Alive特性,实现了服务器到客户端的...

    Pushlet学习(二) -- Pushlet CookBook部分翻译 + 注释

    3. Pushlet工作流程: - 客户端通过Applet与Pushlet Server建立连接。 - 服务器端保存连接,并将其放入等待队列。 - 当服务器端有新的消息需要发送时,会找到对应的连接并发送数据。 - 客户端收到数据后进行处理,...

    pushlet聊天工具编辑中。。。。

    "Pushlet聊天工具"是一个基于特定技术实现的通信软件,主要功能是提供实时的信息传递服务。根据提供的标签“源码”和“工具”,我们可以推断这个压缩包可能包含了一个聊天工具的源代码,用于帮助开发者理解和学习...

    pushlet demo

    "Pushlet Demo"是一个基于Java技术的服务器推送(Server Push)示例,它利用了Comet技术...通过分析和运行Pushlet Demo,你可以更好地掌握服务器推送技术,并可能将其应用于你的Web应用程序中,提高用户体验和实时性。

    pushlet简单示例

    5. **源码解析**:分析Pushlet的核心类和接口,如`PushletSession`、`PushletClient`等,帮助读者理解其实现机制。 6. **实战应用**:可能提供了如何将Pushlet集成到实际项目中的指南,比如Web应用或移动应用中。 ...

    java webIM 上传错了,现在换这个

    1. 分析和阅读源码,了解Pushlet Server的架构和工作原理。 2. 配置和部署Pushlet Server到本地或远程的Web容器中。 3. 编写和测试JavaScript客户端,实现与Pushlet Server的连接、订阅和消息收发功能。 4. 考虑优化...

    Ext demopushlet + Extjs 聊天室v0.9 (含源码)

    8. **源码分析**:对源代码的深入研究可以帮助理解各个部分的功能和工作原理,提升开发者在实际项目中的问题解决能力。 总的来说,这个压缩包提供的资源对于想要学习Web实时通信和前端开发的人来说是一份宝贵的教材...

    旅游网设计代码+及时聊天功能+数据库+文档

    Pushlet技术是一种基于Java的推送技术,它可以实现服务器主动向客户端推送信息,提高用户体验,例如用于即时消息通知、在线咨询等。 【数据库】 在旅游网中,数据库主要用于存储各种信息,如用户信息、旅游产品详情...

    webSocket聊天室

    4. WebSocketDemo1、gunliao、pushlet_test、ws、java+web+聊天室源码、70036242chat、WebIM等项目:这些都是不同开发者或团队实现的WebSocket聊天室示例。它们可能涵盖了多种技术栈,例如JavaScript、HTML5、CSS等...

Global site tag (gtag.js) - Google Analytics