2016-04-07 61 views
2

我正在嘗試創建一個服務器,該服務器始終向我的Firebase數據庫打開一個連接,以監視更改並執行一個功能(在我的情況下,發送推送通知)。這個問題涉及如何保持開放的連接。連續觀察Firebase中的更改

如果可能,我想爲我的服務器使用Python。看起來好像這裏有一個很好的Firebase的Python包裝器:https://github.com/ozgur/python-firebase

我現在可以輕鬆地查詢我的數據庫以返回信息,但似乎沒有關於如何持續監視更改的任何文檔。

我該怎麼做?

回答

2

看來這個Python包裝器使用REST API。在這種情況下,不能使用將觀察者附加到接受實時回調函數的數據的核心Firebase功能。

其實我現在正在研究一個類似的腳本。就我而言,我想觀察我們存儲在Firebase數據庫中的日誌。在做了一些研究之後,我決定使用nodejs將觀察者附加到Firebase數據並將任何即將到來的新數據寫入外部文件,我可以稍後處理它(是的,我也更喜歡Python,所以這就是我僅使用nodejs從數據庫中獲取數據)。

這裏是我的腳本片段:

var ref = new Firebase("https://example.firebaseio.com"); 
var logsRef = new Firebase("https://example.firebaseio.com/logs"); 

var authToFirebase = function(loggedCallback) { 
    ref.authWithPassword({   
     email: "[email protected]", 
     password : "password" 
    }, function(error, authData) { 
     if (error) { 
      console.log("Login Failed!", error); 
     } else { 
      console.log("Authenticated successfully with uid " + authData.uid); 
      loggedCallback(); 
     } 
    }) 
} 

authToFirebase(function() { 
    //attaching child_added observer to logs 
    logsRef.on("child_added", function(snap) {     
    }, function(errorObject) { 
     console.log("The read failed: " + errorObject); 
    }); 
}); 

正如你可以看到它是非常簡單的。請注意,首先我要登錄到現有帳戶,因爲我想觀察的數據對於未經授權的用戶而言不適用於通過Firebase規則機制。

我在這裏使用「child_added」事件,但您可能需要根據需要調整要觀察的事件類型。

+0

感謝您的詳細回覆,我真的很感激它!所以我的邏輯會進入'function(snap){...},'? – Apollo

+0

是的,沒錯。 NodeJS API與Firebase的JavaScript API相同,並且它非常有用。你可以在這裏查看如何檢索數據:https://www.firebase.com/docs/web/guide/retrieving-data.html – pkacprzak

+0

很好的答案!請注意,[Firebase也支持REST上的流式傳輸事件數據](https://www.firebase.com/blog/2014-03-24-streaming-for-firebase-rest-api.html)。您可以使用[python-sse軟件包](https://pypi.python.org/pypi/sseclient/0.0.3)來使用該數據,在這種情況下不需要輪詢。 –