2011-07-25 18 views
1

嗨,我的目標是趕上會話失效,併發送消息到FlexClient訂閱的客戶端的所有目標....已斷開連接。blazeds如何理解會話是否超時

我實現了一個偵聽sessionCretaed,sessionDestroyed,clientCreated,clientDestroyed,messageClientCreated,messageClientDestroyed的服務。

問題是我想趕上messageClientDestroyed併發送到該目的地的消息,該用戶已斷開連接。但blazeds銷燬messageClient當您添加一個subtopic.So如何理解,如果會話失效和所有messageClient被銷燬或者用戶只需進入另一個地方併爲他的消費者添加一個子主題。

我也打開其他解決方案來實現該機制。當用戶斷開會話超時或關閉網站瀏覽器等我想趕上它併發送消息到訂閱的目的地。

謝謝。

回答

1

我不是這個主題的主人,但我相信你必須在d/c之後調入Flex會話生命週期事件FlexSessionListener。

如果您的客戶端因爲他們想要離開,在彈性端調用ChanelSet上的disconnectAll(),這樣Blaze DS將顯式清理資源。

如果您的客戶端,因爲超時的離開,你可以配置通道定義使用無效會話上斷開=真

這兩個應該觸發FlexSessionListner.sessionDestroyed()。此方法的參數是一個FlexSession對象,您可以在其中推斷您需要的內容。

+0

首先感謝您的回答。起初我已經實施了一項服務,就像你說的一樣,但是因爲我的目標是發送消息給訂閱的頻道,我需要獲得訂閱的目的地。但blazeds首先破壞messageClients然後FlexClients並最終破壞會話。所以當我嘗試在sessionDestroyed中獲得FlexClient或messageClients時,我什麼都沒有。現在我正在捕獲messageClientDestroyed事件來發送消息,但它不僅在會話被銷燬時調用,而且在客戶端添加子主題時也會調用它,所以如果會話將要銷燬或添加了停止,則需要獲取該子主題。 – maniacneron

+0

這太奇怪了,傳入sessionDestoryed的FlexSession對象應該給正在離開的客戶端。如果您可以訪問MessageService實例,則可以調用pushMessageToClients().... http://livedocs.adobe.com/blazeds/1/javadoc/flex/messaging/services/MessageService.html –