2012-06-20 53 views
1

是否有註冊代碼的方式,當Flash是快要接近運行(例如,當用戶關閉瀏覽器或者DOM操作導致嵌入式播放器中刪除)?如何在Flash虛擬機關閉時運行拆卸代碼?

特別,我想我的應用程序,以關閉數據包發送到遠程服務,讓用戶的同行知道用戶沒有回來,而不必等到超時的機會。我使用URLLoader和URLRequest來維護BOSH連接,因此我歡迎適用於此特定情況的解決方案。但是,如果有NetConnection特定的解決方案,我相信我也可以向他們學習。

我很高興接受這個回調不會在kill -9上運行,但如果讓更優雅的退出路徑允許某些代碼執行,那將是非常好的。

+0

如何壓倒一切的window.close發送您的活動JS?那麼問題就在於允許用戶在途中關閉/發送它們。 – ansiart

+0

@DanielH,我們已經考慮過使用window.onBeforeUnload這樣的JS級別的選項。會話在Flash中保持不變(因此最容易關閉),所以最可靠的斷開方式將在VM內部進行。我們發現在JS級別偵聽並使用ExternalInterface觸發Flash代碼是非常不可靠的。 –

+0

我對BOSH不太瞭解,除了使用keep-alives之外 - 我覺得服務器無法檢測到斷開連接似乎很奇怪。下面將寫一些關於RTMP的內容。 – ansiart

回答

0

這似乎是更好的解決辦法是通過在服務器端要做到這一點沒有?服務器應該能夠檢測到斷開連接,然後可以使會話無效。

但是,你可以用客戶端/插座基礎的解決方案去,儘管更多的開銷。使用FMS或其他rtm實時服務器,您可以將事件發送到您的Web服務器,以避免連接中斷(儘管在低網絡連接或互聯網丟失的情況下您可能遇到問題)。我建議去反對這雖然,在我的經驗,FMS吮吸:)

是設定極低超時的可能性也不大? (即< 10秒)

+0

我希望在收穫會話之前有適度的超時,以便暫時中斷網絡(例如,短暫丟失Wi-Fi連接)以便從優雅中恢復。結果,超時至少30秒將會很好。無論如何,服務器可以相對快速地確定客戶端是否失去連接。我試圖區分的關鍵是由於臨時的網絡問題(在這種情況下,我們應該讓客戶端有時間重新連接)或由於Flash虛擬機關閉而導致連接丟失(在這種情況下應該通知其他人) )。 –

+0

是的,我認爲你是SOL,不用編寫自己的瀏覽器擴展。 – ansiart