如果在網上搜尋,不難發現流傳著一段偵測和踢走已經斷線的使用者的FlashCom ASC程式碼,我以前也是用它的。隨著實戰經驗增加,已經發現這段程式碼是沒有用,在大部分情況,例如當機,網絡中斷,拔掉網絡連線等,FlashCom根本偵測不到使用者已經斷線。
這問題在Linux版的FlashCom一定出現,Windows版比較少見。在Linux版中,打開Communication App Inspector,Live Log一頁,經常會出現Response object not found,因為負責處理Client傳回結果的onResult根本不存!
到真的偵測到已經斷線的使用者,想用application.disconnect()踢走他時,如果使用者正有Stream連線,雖然執行disconnect()的結果是true,但實際上disconnect()根本踢不走他,這當然連onDisconnect()也沒有觸發。變成了使用者的Client Object永遠存在,這就是常見所謂的Ghost User,最後還是要等20分鐘後FlashCom清除垃圾時才可以踢走他。
因此這段流行的程式碼,只適合思考上概念啟發,根本不能用於實戰,還是自己踏實地寫一段吧。
(本文針對FlashCom 1.5.2撰寫) |