Pushlet二次開發重點

1 Pushlet自帶事件源分析

       Pushlet源代碼中自帶了一些事例,對這些例子的分析有助於編寫自己的代碼。Pushlet源代碼提供了一種事件源機制,即將一些服務作爲事件源,通過這些源產生各種各樣的事件,然後加入到相應的Session中。

       1Servlet初始化EventSourceManager。在Pushlet這個Servlet初始化時,會對SessionManagerDispatcher進行實例初始化,它們是通過單件模式構造的;然後調用EventSourceManager這個工具類(稱爲工具類是因爲它由一組static方法組成,每一個方法單獨完成一項功能)讀取source.properties配置文件,對該配置文件中的source類進行初始化。Pushlet源代碼中配置了五個事件源類,且都是一內部靜態類,加載後直接調用相應的方法,而它們又被設計爲線程,所以在系統初始化後它們就直接在系統中不停地以線程方式運行。

       2)事件源代碼分析:

       EventSource:事件源接口;

       EventPullSource:抽象類,實現了EventSourceRunnable,定義了抽象方法getSleepTime()pullEvent();在線程的run()方法中實現了將事件分發到相應的Session

       PingEventPullSource:繼承了EventPullSource抽象類,實現了兩個抽象方法,即線程睡眠時間和產生Event

       3)核心是Dispatcher將產生的事件推送到各個Session中。二次開發時,如果不是以這種系統源的方式推送,可以自己編寫相應的事件生成器,然後推送到相應的Session中。

二次開發

       2.1 二次開發需求

       Pushlet的需求,也就是需求以推送的方式向客戶端發送的信息,主要的有服務器端的一些服務、實時類信息推送的,如天氣、實時短消息、一些定製類服務等。

       2.2 二次開發關鍵點

       Pushlet二次開發過程中關鍵一點是如何構建數據事件源以及如何將事件推送給特定的客戶端。因此可能需要修改的關鍵點有:

       1)事件源。這裏的事件源可以是pushlet定義的EventSource,也可以是根據特定業務需求產生的事件源。其實所謂的事件源即如何構建事件,較多的情況及新建Event對象。

       2Session修改。默認情況下SessionId都是隨機產生的,但是實際業務需求可能是要求將Session與特定的用戶綁定在一起,因此該標識可能就需要另外修改。

       3)特定推送。這裏的推送方式可能有針對特定用戶、特定用戶羣、廣播推送等,這需要按實際進行修改。

       4)分佈式處理。Pushlet適合在同一臺服務器上運行,但是如果用戶數量大,可能需要將用戶進行分組置於不同的服務器內,而不同的服務器間如何通信也是需要另外編碼實現的。

       基實pushlet只是實現了一種框架,其內包括了服務器端的池模式及ajax實現的服務器推技術,因此其技術難度實際上並不是很大,詳細閱讀一下源代碼即可分析清楚。

 

如有感興趣的朋友,大家可以一起討論,討論!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章