2014-06-08 125 views
2

我正在使用Atmosphere Framework 2.0.8。將EventListener添加到AtmosphereResource的正確方法是什麼?

我已經在我的應用程序中實現了AtmosphereHandler,並且通過WebSockets和長輪詢發生了雙向通信。

我想添加一些處理代碼,當客戶端斷開連接以清理某些特定於該客戶端的資源時(即,我在表中有一個條目要刪除)。

我已閱讀下列維基條目:

OnDisconnect技巧:https://github.com/Atmosphere/atmosphere/wiki/onDisconnect-tricks 配置氣氛監聽:https://github.com/Atmosphere/atmosphere/wiki/Configuring-Atmosphere-Listener

我不是明確的一點是,我要補充的調用

atmosphereResource.addEventListener(new AtmosphereResourceEventListenerAdapter() {}); 

我最終在JavaDoc中找到了一些用於在onRequest()方法中註冊EventListener的AtmosphereHandler的示例代碼。 http://atmosphere.github.io/atmosphere/apidocs/org/atmosphere/cpr/AtmosphereHandler.html

我想知道的是,如果這是正確的方式去解決它?

這是我的理解,AtmosphereResource表示客戶端和服務器之間的連接的連接的生活。 uuid通過來自同一客戶端的onRequest()方法在多次調用中保持對象一致。因此,每次調用onRequest方法時,相同的AtmosphereResource對象都會獲得EventListener。

這看起來不對。這是否會導致成千上萬的EventListeners正在爲每個AtmosphereResource註冊?

看來EventLister只能爲每個AtmosphereResource註冊一次。

我覺得我在這裏錯過了一些基本的東西。有人能解釋一下嗎?

回答

3

這是example使用MeteorServlet,所以它看起來不像你要做的,但它應該讓你開始。我將聽衆添加到Meteor實例中,然後將其添加到AtmosphereResource。每個資源只有一個監聽器。

重寫的onDisconnect()方法調用this Grails service method來處理事件。當然,你會想調用一些清理你的數據庫資源的東西。

請注意,servlet使用these options配置。我想你可能需要org.atmosphere.interceptor.HeartbeatInterceptor,但是自從我最初設置它以來已經很長時間了,我不記得是否有必要。

相關問題