2016-01-06 40 views
2

我正在使用authWithCustomToken方法使用Firebase登錄。登錄大約需要5秒鐘或更長時間。我啓用了Firebase日誌(setLogLevel(Logger.Level.DEBUG))進行監控是否存在任何問題。日誌是在這裏(我修剪一下,如果需要的話我可以給一個鏈接吧):Android,Firebase登錄需要多長時間,發生WebSocketException

PS:Android的火力客戶端版本是2.5.0

ws_0 - websocket opened 
conn_0 - Got control message: {t=r, d=s-softlayer.firebaseio.com} 
conn_0 - Got a reset; killing connection to tbf.firebaseio.com; Updating internalHost to s-softlayer.firebaseio.com 
conn_0 - closing realtime connection 
handleIncomingFrame complete frame: {d={t=r, d=s-softlayer.firebaseio.com}, t=c} 
ws_0 - websocket is being closed 
ws_0 - had an error 
    com.firebase.tubesock.WebSocketException: IO Error 
     at com.firebase.tubesock.WebSocketReceiver.run(WebSocketReceiver.java:78) 
     at com.firebase.tubesock.WebSocket.runReader(WebSocket.java:372) 
     at com.firebase.tubesock.WebSocket.access$000(WebSocket.java:30) 
     at com.firebase.tubesock.WebSocket$2.run(WebSocket.java:108) 
     at java.lang.Thread.run(Thread.java:818) 
    Caused by: java.io.EOFException 
     at libcore.io.Streams.readFully(Streams.java:83) 
     at java.io.DataInputStream.readFully(DataInputStream.java:99) 
     at com.firebase.tubesock.WebSocketReceiver.read(WebSocketReceiver.java:141) 
     at com.firebase.tubesock.WebSocketReceiver.run(WebSocketReceiver.java:34) 
     at com.firebase.tubesock.WebSocket.runReader(WebSocket.java:372)  
     at com.firebase.tubesock.WebSocket.access$000(WebSocket.java:30)  
     at com.firebase.tubesock.WebSocket$2.run(WebSocket.java:108)  
     at java.lang.Thread.run(Thread.java:818)  

ws_0 - |IO Error| 
ws_0 - closed 

conn_1 - Opening a connection 
ws_1 - websocket opened 
ws_1 - handleIncomingFrame complete frame: {d={t=r, d=s-dal5-nss-19.firebaseio.com}, t=c} 
conn_1 - Got control message: {t=r, d=s-dal5-nss-19.firebaseio.com} 
conn_1 - Got a reset; killing connection to s-softlayer.firebaseio.com; Updating internalHost to s-dal5-nss-19.firebaseio.com 
conn_1 - closing realtime connection 
ws_1 - websocket is being closed 
ws_1 - had an error 
    com.firebase.tubesock.WebSocketException: IO Error 
     at com.firebase.tubesock.WebSocketReceiver.run(WebSocketReceiver.java:78) 
     ... 
    Caused by: java.io.EOFException 
     at libcore.io.Streams.readFully(Streams.java:83) 
     ... 

ws_1 - |IO Error| 
ws_1 - closed 
conn_2 - Opening a connection 
ws_1 - had an error 
    com.firebase.tubesock.WebSocketException: IO Exception 
    ... 
ws_1 - |IO Exception| 
ws_2 - websocket opened 
conn_2 - Got control message: {t=h, d={ts=1452086065546, v=5, h=s-dal5-nss-19.firebaseio.com, s=EaQhQ7iRAjeWVxvzBJEFD7k4TKFsmrms}} 
conn_2 - realtime connection established 

這是日誌說有一個錯誤?

我應該忽略它嗎?如果是,爲什麼登錄時間太長?

回答

3

輸出中沒有信息來確定任何時間影響。但據我所知,流量看起來很正常。您的前兩個連接正在重定向。然後第三個連接到達正確的服務器,它以「實時連接建立」作出響應。

+0

但是,總是前兩個連接失敗。第三次成功。這很奇怪,不是嗎? – wisemann

+0

沒有,據我所知,這是正常的。在初始連接時,您可以訪問「隨機」Firebase服務器。由於這不太可能是您需要的服務器,因此您將重定向到正確的服務器。由於各種原因,您的情況是兩步過程。但是IIRC最終的服務器名稱應在第一次建立實時連接後進行存儲。 –

+0

問題是每次都發生這種情況,而不是某個時候。我會評論更新。感謝您的幫助 – wisemann

2

問題是在keepSynced(true)之後進行驗證。 Synced節點具有大約250KB的數據。我想同步數據塊我的身份驗證。另一方面,firebase無法同步節點,因爲它必須通過認證才能讀取節點(看起來像是死鎖)。我不確定實際原因,但現在刪除keepSynced(true)行解決了我的問題。

Firebase ref = new Firebase("my_firebase_url"); 
ref.child("matches").keepSynced(true); // removed this line 
ref.authWithCustomToken(...);