2016-11-14 33 views
2

首先,我想提一下,我瞭解Firebase onDisconnect方法在JavaScript中的工作原理。它提前告訴服務器一旦用戶斷開連接後該怎麼做。Firebase:在onDisconnect方法背後做了什麼? (AS3)

現在,我正在使用AS3。我應該如何告訴服務器與'onDisconnect'方法所實現的相同?

當我嘗試在JavaScript中調試代碼時,它似乎沒有發送任何東西到服務器(或者我錯了)。

示例代碼在JavaScript:

userRef.on('value', function(snapshot) { 
    if (snapshot.val()) { 
    userRef.onDisconnect().remove(); //this line does the magic 
    } 
}); 

什麼正被onDisconnect方法,告訴服務器做什麼呢?用AS3編寫什麼是等效代碼?

編輯: 在AS3的代碼,如參考由here,它適用於實時數據庫。

private var myStream:URLStream; 

private function loadLiveFeed():void 
{ 
    var header:URLRequestHeader = new URLRequestHeader("Accept", "text/event-stream"); 

    var request:URLRequest = new URLRequest("https://<YOUR-PROJECT-ID>.firebaseio.com/breakingnews.json"); 
    request.requestHeaders.push(header); 

    myStream:URLStream = new URLStream(); 
    myStream.addEventListener(ProgressEvent.PROGRESS, progress); 
    myStream.load(request); 
} 

private function progress(event:ProgressEvent):void 
{    
    var message:String = myStream.readUTFBytes(myStream.bytesAvailable); 
    trace(message); 
} 
+0

那麼,你如何建立在As3連接?你的代碼到目前爲止看起來如何?它看起來並不像他們提供的As3的API。 – null

+0

@空我的壞。我只是在AS3 – zeroflaw

+0

中添加了代碼@null你是對的。他們沒有提供AS3的API。但我很好奇,'onDisconnect'方法是如何工作的。它(魔術線)發送一些東西給服務器?我感覺我在黑暗中。 – zeroflaw

回答

1

沒有時間回答這個問題,但是您必須對通信進行逆向工程。在引擎蓋下,這只是HTTP(或類似),可以在As3代碼中看到。要準確地知道發生了什麼,請在JavaScript中使用包含您感興趣的魔術線的示例代碼,然後在瀏覽器中執行它。所有請求都可以在瀏覽器的開發者工具中監控。你應該能夠識別正在發送的內容。

此外,它是JavaScript,這意味着你必須有你可以簡單閱讀的源代碼。它可能被縮小和/或混淆,但也許你可以找到一個可讀的。

隨着知道裸請求的樣子,您可以使用任何能夠執行必要網絡通信的語言來實現您自己的API。

+0

哈哈。其實我是這麼做的(通過瀏覽器調試代碼),但是我沒有通過網絡標籤看到任何東西(通常會顯示是否通過網絡發送的東西)。是的,我剛剛發現了未縮小的版本。無論如何,我可能忽略了一些東西。我會繼續研究這一點。 – zeroflaw

+0

你想在我關閉這篇文章之前提及任何東西。我不知道什麼是由wireshark捕獲,如在https://github.com/PhantomAppDevelopment/firebase-as3/issues/4 張貼我希望有人可以說我錯了 – zeroflaw

3

你共享的代碼通過其REST API訪問火力地堡數據庫:

new URLRequest("https://<YOUR-PROJECT-ID>.firebaseio.com/breakingnews.json"); 

這意味着,它使用的是無連接的方法來與數據庫進行交互。不幸的是,這也意味着無法註冊onDisconnect()處理程序,因爲它基本上必須在您創建的任何兩個HTTP調用之間觸發。

+0

可以請你詳細說一點點更多?當javascript'註冊'onDisconnect時,它是否通過網絡發送了一些內容? – zeroflaw

+1

當您註冊'onDisconnect()'處理程序時,將在斷開連接時寫入的實際數據即預先計算併發送到服務器。然後,當服務器檢測到客戶端不在時,它會寫入您指定的數據。但是由於REST API是無連接的,因此沒有明確的時刻來檢測客戶端是否消失。 –

+0

我想我明白你現在的意思。在這種情況下,AS3中沒有出路嗎?我們可以使用某種套接字而不是URLRequest? – zeroflaw