pushlet_2.0.3_源码分析_服务器端__
Pushlet 2.0.3 是一个开源的服务器推技术实现,主要针对Java平台。它允许服务器主动将数据推送给客户端,支持浏览器和桌面应用程序。本文将深入分析Pushlet 2.0.3的服务器端源码,了解其架构、工作原理及关键实现。 **总体架构** Pushlet 的架构主要包括服务器端和客户端两部分。服务器端基于Servlet技术,负责监听客户端请求,并通过不同的adapter响应客户端。客户端分为浏览器和桌面应用程序,它们通过HTTP连接与服务器交互。整个系统的核心组件包括Pushlet、Session、Controller、Subscriber、Dispatcher和clientAdapter。 1. **Pushlet** - 接收所有用户请求,将请求封装成event对象,然后创建command对象交给Controller处理。 2. **Session** - 代表用户的一次会话,不同于HTTP session,它使用URL重写的方式来跟踪会话,会话在指定存活期内有效。 3. **Controller** - 执行所有命令,包括控制命令和数据推送命令。数据推送的实际执行由Subscriber完成。 4. **Subscriber** - 核心类之一,维护一个阻塞的事件队列,根据客户端的不同模式(如stream或pull/poll)来发送响应事件。 5. **Dispatcher** - 另一核心类,负责事件的分发,支持多播、广播和单播。事件源可以是客户端或eventSource。 6. **clientAdapter** - 包括browserAdapter、XMLAdapter、serializedAdapter,分别用于向不同类型的客户端发送javascript、xml或序列化数据。 **工作原理** Pushlet 实现了两种服务器推模式:stream(HTTP长连接)和pull/poll(客户端定时刷新)。对于浏览器客户端,它利用DHTML和JavaScript回调函数实现实时更新,而桌面应用则更容易实现此效果。系统通过控制通道和数据通道确保可靠性和健壮性,控制通道保持非阻塞,实时接收命令,数据通道在stream模式下保持连接,直到收到断开命令或异常。pull/poll模式下,连接在有数据时断开。心跳机制用于在阻塞超时后向客户端发送消息,保持会话活跃。 **协议服务** Pushlet 提供以下协议服务: 1. **join** - 开始会话 2. **leave** - 结束会话 3. **subscribe** - 订阅主题 4. **unsubscribe** - 取消订阅 5. **listen** - 打开数据通道,选择stream、pull或poll模式 6. **join-listen** - 同时启动会话并开始监听 7. **publish** - 发布数据 8. **heartbeat** - 表示会话仍然活跃 **具体实现** Pushlet 的实现大量使用了单例、工厂模式、适配器模式和命令模式,强调面向接口和抽象类编程,便于理解和扩展。系统属性主要在配置文件中定义,通过扩展点可以方便地替换默认实现。请求处理的入口始于pushlet的Init方法。 在源码分析中,我们可以看到Pushlet如何处理请求,如何创建并执行命令,以及如何通过Adapter将响应数据发送给客户端。每个组件的职责明确,协同工作以实现服务器推功能。 Pushlet 2.0.3 是一个强大的服务器推解决方案,其设计考虑了灵活性和可扩展性,能够适应多种客户端场景,提供高效的数据推送服务。通过深入源码,我们可以更好地理解其内部工作机制,以便在实际项目中灵活运用或进行二次开发。
剩余8页未读,继续阅读
- 粉丝: 22
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助