2013-05-20 36 views
2

我在我的應用程序中使用Websockets進行流式傳輸。 我在後端使用碼頭用於此目的特定於瀏覽器的Web套接字錯誤關閉代碼

在到的OnClose回調方法我有這個

@Override 
    public void onClose(int arg0, String arg1) { 
     logger.info("In onClose :: " + arg0 + " :: " + arg1); 
} 

我觀察到的是,該錯誤代碼是不是通用的,但具體到瀏覽器是

當我使用鉻它顯示1006,如果瀏覽器使用CTRL + W關閉時,點擊了十字按鈕,或甚至用戶點擊退出按鈕

但是其中如在Firefox它顯示1001如果瀏覽器使用ctrl + w關閉,點擊十字按鈕,甚至用戶點擊註銷按鈕

現在的問題是,我真的無法確定爲什麼發生斷開連接,因爲它是一個瀏覽器特定的? ?

請分享您的意見,如何在這種情況下進行調試?

回答

1

這可有助於:

http://tools.ietf.org/html/rfc6455#section-7.4.1

具體來說:

1001表示一個端點「消失」,如服務器 下降或瀏覽器具有導航遠離一頁>

and

1006是一個保留值,不得設置爲一個端點的關閉控制幀的狀態代碼 。它被指定用於 應用程序,期望狀態碼指示連接 異常關閉,例如,不發送或接收關閉控制幀。

所以我會猜測你從服務器的角度來看待這種情況,在這種情況下,1006會表明chrome端點表現不佳,服務器對特殊關閉代碼做出反應。在你的客戶端,我會開始調試它,以確保它能夠將其轉換爲任何需要密碼的代碼,以便將實際密碼1001返回到服務器。現在,您可能無法在所有場景中關閉邏輯,這就是爲什麼此關閉代碼首先存在,但您至少應該能夠通過您自己的註銷按鈕乾淨地關閉連接。

+0

當用戶點擊註銷按鈕時,我不應該在任何瀏覽器上獲取1000而不是1001的代碼,請糾正我以防萬一我錯了。 – Kiran

+0

將取決於該註銷按鈕發生了什麼,我懷疑有些JavaScript框架正在代表您工作。如果你在_all_沒有得到1000,那麼我會在狡猾的客戶端說一些話。 –

+0

關閉代碼1000用於發佈您的代碼。沒有JavaScript框架應該爲您自動發佈近1000個。對於firefox發送1001是一個理智的選項卡/瀏覽器關閉的迴應。對於鉻不發送關閉,而是依靠服務器端EOF檢測和隨後的異常(不乾淨)關閉代碼1006對您的使用情況也是一個理智的反應。 –