1 Pushlet自带事件源分析
Pushlet源代码中自带了一些事例,对这些例子的分析有助于编写自己的代码。Pushlet源代码提供了一种事件源机制,即将一些服务作为事件源,通过这些源产生各种各样的事件,然后加入到相应的Session中。
1)Servlet初始化EventSourceManager。在Pushlet这个Servlet初始化时,会对SessionManager、Dispatcher进行实例初始化,它们是通过单件模式构造的;然后调用EventSourceManager这个工具类(称为工具类是因为它由一组static方法组成,每一个方法单独完成一项功能)读取source.properties配置文件,对该配置文件中的source类进行初始化。Pushlet源代码中配置了五个事件源类,且都是一内部静态类,加载后直接调用相应的方法,而它们又被设计为线程,所以在系统初始化后它们就直接在系统中不停地以线程方式运行。
2)事件源代码分析:
EventSource:事件源接口;
EventPullSource:抽象类,实现了EventSource和Runnable,定义了抽象方法getSleepTime()和pullEvent();在线程的run()方法中实现了将事件分发到相应的Session;
PingEventPullSource:继承了EventPullSource抽象类,实现了两个抽象方法,即线程睡眠时间和产生Event。
3)核心是Dispatcher将产生的事件推送到各个Session中。二次开发时,如果不是以这种系统源的方式推送,可以自己编写相应的事件生成器,然后推送到相应的Session中。
2 二次开发
2.1 二次开发需求
Pushlet的需求,也就是需求以“推送”的方式向客户端发送的信息,主要的有服务器端的一些服务、实时类信息推送的,如天气、实时短消息、一些定制类服务等。
2.2 二次开发关键点
Pushlet二次开发过程中关键一点是如何构建数据事件源以及如何将事件推送给特定的客户端。因此可能需要修改的关键点有:
1)事件源。这里的事件源可以是pushlet定义的EventSource,也可以是根据特定业务需求产生的事件源。其实所谓的事件源即如何构建事件,较多的情况及新建Event对象。
2)Session修改。默认情况下Session的Id都是随机产生的,但是实际业务需求可能是要求将Session与特定的用户绑定在一起,因此该标识可能就需要另外修改。
3)特定推送。这里的推送方式可能有针对特定用户、特定用户群、广播推送等,这需要按实际进行修改。
4)分布式处理。Pushlet适合在同一台服务器上运行,但是如果用户数量大,可能需要将用户进行分组置于不同的服务器内,而不同的服务器间如何通信也是需要另外编码实现的。
基实pushlet只是实现了一种框架,其内包括了服务器端的池模式及ajax实现的服务器推技术,因此其技术难度实际上并不是很大,详细阅读一下源代码即可分析清楚。
Pushlet源代码中自带了一些事例,对这些例子的分析有助于编写自己的代码。Pushlet源代码提供了一种事件源机制,即将一些服务作为事件源,通过这些源产生各种各样的事件,然后加入到相应的Session中。
1)Servlet初始化EventSourceManager。在Pushlet这个Servlet初始化时,会对SessionManager、Dispatcher进行实例初始化,它们是通过单件模式构造的;然后调用EventSourceManager这个工具类(称为工具类是因为它由一组static方法组成,每一个方法单独完成一项功能)读取source.properties配置文件,对该配置文件中的source类进行初始化。Pushlet源代码中配置了五个事件源类,且都是一内部静态类,加载后直接调用相应的方法,而它们又被设计为线程,所以在系统初始化后它们就直接在系统中不停地以线程方式运行。
2)事件源代码分析:
EventSource:事件源接口;
EventPullSource:抽象类,实现了EventSource和Runnable,定义了抽象方法getSleepTime()和pullEvent();在线程的run()方法中实现了将事件分发到相应的Session;
PingEventPullSource:继承了EventPullSource抽象类,实现了两个抽象方法,即线程睡眠时间和产生Event。
3)核心是Dispatcher将产生的事件推送到各个Session中。二次开发时,如果不是以这种系统源的方式推送,可以自己编写相应的事件生成器,然后推送到相应的Session中。
2 二次开发
2.1 二次开发需求
Pushlet的需求,也就是需求以“推送”的方式向客户端发送的信息,主要的有服务器端的一些服务、实时类信息推送的,如天气、实时短消息、一些定制类服务等。
2.2 二次开发关键点
Pushlet二次开发过程中关键一点是如何构建数据事件源以及如何将事件推送给特定的客户端。因此可能需要修改的关键点有:
1)事件源。这里的事件源可以是pushlet定义的EventSource,也可以是根据特定业务需求产生的事件源。其实所谓的事件源即如何构建事件,较多的情况及新建Event对象。
2)Session修改。默认情况下Session的Id都是随机产生的,但是实际业务需求可能是要求将Session与特定的用户绑定在一起,因此该标识可能就需要另外修改。
3)特定推送。这里的推送方式可能有针对特定用户、特定用户群、广播推送等,这需要按实际进行修改。
4)分布式处理。Pushlet适合在同一台服务器上运行,但是如果用户数量大,可能需要将用户进行分组置于不同的服务器内,而不同的服务器间如何通信也是需要另外编码实现的。
基实pushlet只是实现了一种框架,其内包括了服务器端的池模式及ajax实现的服务器推技术,因此其技术难度实际上并不是很大,详细阅读一下源代码即可分析清楚。