Pushlet 2.0.3 服务器端源码解析:构建Java服务器推技术

需积分: 9 10 下载量 168 浏览量 更新于2024-09-27 收藏 119KB DOC 举报
"Pushlet_2.0.3_源码分析_服务器端" Pushlet是一个实现服务器推技术的框架,版本2.0.3。它主要用于实现在Java环境中向客户端实时推送数据,无论客户端是浏览器还是桌面应用程序。Pushlet的核心在于使用Servlet技术监听客户端的请求,并通过特定的适配器策略来回应不同的客户端。 1. **总体架构** Pushlet的架构设计考虑了服务器端和客户端的交互。服务器端主要由Servlet组件构成,负责接收并处理来自客户端的请求。客户端则分为两类:基于浏览器的和桌面应用程序。系统架构如图1所示,其中服务器端的响应出口是`clientAdapter`接口,该接口根据不同客户端类型创建相应的适配器以发送响应。 2. **关键类与组件** - **Pushlet**: 接收所有用户的请求,将这些请求转化为`event`对象。然后,基于session、event、request和response创建`command`对象,将command交给`controller`进行处理。 - **Session**: 表示一次用户会话。不同于标准的`HttpSession`,Pushlet的session使用URL重写方式来保持会话状态,每个请求都会包含分配的sessionid。 - **Controller**: 是命令的执行中心,处理各种控制命令和数据推送命令。数据推送实际由`Subscriber`完成。 - **Subscriber**: 核心类,管理一个阻塞事件队列,根据客户端的不同模式(如stream、pull/poll)来发送响应事件。Stream模式利用HTTP长连接,而pull/poll模式则依赖客户端定时刷新请求。 - **Dispatcher**: 事件分发器,核心组件,负责从事件源(可能是客户端或`eventSource`)接收事件,然后根据事件属性选择多播、广播或单播的方式将事件发送至`Subscriber`的事件队列。 - **clientAdapter**: 包含三个具体实现:`browserAdapter`、`XMLAdapter`和`serializedAdapter`,分别用于向不同类型的客户端(JavaScript、XML、序列化数据)发送响应。适配器的选择基于用户请求事件的`format`参数。 3. **其他辅助类** 除了上述核心组件,Pushlet还提供了一些公共类,如日志记录工具和可配置选项,以支持框架的正常运行和扩展。 4. **工作流程** - 客户端发起请求,Pushlet接收到请求后,通过`Pushlet`包装成`event`和`command`。 - `Controller`解析`command`,可能执行控制操作或触发数据推送。 - 数据推送由`Subscriber`处理,事件被放入队列,等待分发。 - `Dispatcher`接收到事件后,根据事件的特性决定分发策略,将事件发送到对应的客户端适配器。 - `clientAdapter`根据客户端类型,将事件转换为适合客户端的格式并发送。 5. **客户端模式** Pushlet支持两种主要的客户端模式: - Stream模式:客户端保持一个持久的HTTP连接,服务器可以通过这个连接实时推送数据。 - Pull/Poll模式:客户端定期向服务器发送请求,服务器在接收到请求时推送新数据。 Pushlet的这种设计允许服务器主动地将数据推送到客户端,从而实现实时性,特别适用于股票报价、在线聊天、实时通知等场景。其源码分析有助于理解服务器推技术的实现原理,为开发类似的实时通信系统提供参考。