I''m目前與具有設置符合以下類推聊天應用擺弄:JBoss Seam的 - 在大規模應用信息
- 聊天是保存在內存中的對象和包含的列表聊天 消息
- 聊天在多個瀏覽器窗口渲染和更新 與A4J拉到:推
的程序設置是這樣的:一個聊天對象的實例與它的消息是在不同會話中頁面作用域接縫組件之間共享。現在,當任何會話發佈新消息(即修改聊天對象)時,應該將所有接縫組件通知新消息,以便新狀態可以在所有客戶端上中繼到UI。
我能想到的三種方式來實現這一目標:
- Seam的聊天ID作爲參數的事件,然後將每個組件檢查ID,要麼更新或忽略該消息
- JMS隊列或一個JMS主題,其中在具有過濾器的每個組件listenes只是它的聊天
- 純Java偵聽機制在共享聊天對象,即,每個接縫部件寄存器它和通知是純和直接的java
爲了論證的緣故,假設聊天的數量很大(幾萬),聊天用戶的數量也很少(比如說2-10)。
每個規模績效如何明智?你有什麼其他的建議如何使這與Seam和表現良好?正如我所見,(1)將被整合和清潔,但最終你會通知數以萬計的組件,其中只有少數組件需要它。所以它可能不會縮放。
(2)將被整合並且僅取決於JMS提供者(可以交換)的性能,並且也可以在沒有修改的情況下在羣集環境中工作。我不確定這裏的JMS的性能,即每秒幾百條消息,以及具有不同過濾器的千位聽衆是多少? (3)會很快,因爲只有所需的組件纔會被通知,並且通知是純粹且直接的java。但是,可能會出現併發/訪問問題,因爲會話/組件/線程已完成。
對於(1)和(3)支持聚類的解決方案必須在某些時候需要手動添加。