2010-02-24 109 views
2

我想知道當Flex客戶端與BlazeDS目標斷開連接時,是否可以輕鬆檢測(在服務器端)?我的情況就是,我想嘗試使用它來計算每個客戶端連接每個會話的時間。我需要能夠區分客戶端(即不僅僅是統計我在ds-console中看到的當前連接的客戶端的數量)。Flex客戶端從BlazeDS目標斷開連接時檢測(在服務器端)

雖然我可以在我的客戶端的「我正在註銷」進程中進行編程,但我不知道如果客戶端只是導航到另一個網頁,而不是通過所述註銷過程,它會觸發。

任何人都可以建議,如果有一種簡單的方法來做這種類型的監測在服務器端請。

非常感謝, 亞歷

回答

0

正確做到這一點的唯一方法是以某種方式實現心跳機制。您可以像前面建議的那樣,使用http中的保持活動狀態以及會話過期,但我的觀點是使用BlazeDS的消息機制(以X秒發送消息)。您可以控制時間間隔和其他方面(也許您希望檢測客戶端是否在幾個小時內沒有做任何事情,並且即使客戶端仍處於連接狀態也會使會話失效)。

如果你想將立即通知(聊天應用程序),當客戶端斷開的解決方案是有一個插座(RTMP)或一些模擬(HTTP流媒體)如果客戶端斷開連接,這將即刻檢測,然而,這斷線可能是暫時的(也許網絡關閉了一秒鐘,之後就可以了,你也應該檢測到這一點)。

+0

感謝你們雙方的愛馬仕和康奈爾。某種心跳是我想我可能必須做的事情(我認爲應該很容易爲連接的客戶端設置「心跳」目標)。我只是在想這可能是BlazeDS內置的東西(儘管我還沒有找到它)。我會計劃心跳。 再次 – AlexC 2010-02-25 20:58:09

0

我假設的BlazeDS將提供當一個客戶端斷開連接的回調或事件,但我還沒有與Blaze工作,這樣也只是一個猜測。第一步是查看文檔以查看它是否有效,因爲這將是您最好的選擇。

我在沒有斷開連接事件(或不可靠)的情況下所做的工作是添加一個保持連接的消息。例如,客戶端將被配置爲每隔30秒發送一次保持活動消息,並且如果服務器的運行時間超過2分鐘而沒有看到保持活動,那麼它假定客戶端已斷開連接。這可以讓你區分不同的客戶,並且可以利用費率和檢查時間來獲得滿意的東西。

1

實現你延長自己的適配器 「延伸ServiceAdapter」

然後設定功能:

@覆蓋 公共布爾handlesSubscriptions(){ 迴歸真實; } 所以,你可以處理訂閱和退訂

然後你就可以管理那些在管理功能:

@覆蓋 公共對象管理(CommandMessage commandMessage){

開關(commandMessage.getOperation() ){ case CommandMessage.SUBSCRIBE_OPERATION: break; case CommandMessage。UNSUBSCRIBE_OPERATION: break; }

}

您還可以乘坐不同的命令。

希望得到這個幫助

相關問題