Pushlet 2.0.3 服务器端源码解析:构建Java服务器推技术
需积分: 9 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的这种设计允许服务器主动地将数据推送到客户端,从而实现实时性,特别适用于股票报价、在线聊天、实时通知等场景。其源码分析有助于理解服务器推技术的实现原理,为开发类似的实时通信系统提供参考。
2012-07-31 上传
2019-04-08 上传
点击了解资源详情
2013-08-29 上传
2010-04-14 上传
2009-03-12 上传
码农代表
- 粉丝: 22
- 资源: 4
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建