我正在嘗試創建一個服務器,該服務器始終向我的Firebase數據庫打開一個連接,以監視更改並執行一個功能(在我的情況下,發送推送通知)。這個問題涉及如何保持開放的連接。連續觀察Firebase中的更改
如果可能,我想爲我的服務器使用Python。看起來好像這裏有一個很好的Firebase的Python包裝器:https://github.com/ozgur/python-firebase
我現在可以輕鬆地查詢我的數據庫以返回信息,但似乎沒有關於如何持續監視更改的任何文檔。
我該怎麼做?
我正在嘗試創建一個服務器,該服務器始終向我的Firebase數據庫打開一個連接,以監視更改並執行一個功能(在我的情況下,發送推送通知)。這個問題涉及如何保持開放的連接。連續觀察Firebase中的更改
如果可能,我想爲我的服務器使用Python。看起來好像這裏有一個很好的Firebase的Python包裝器:https://github.com/ozgur/python-firebase
我現在可以輕鬆地查詢我的數據庫以返回信息,但似乎沒有關於如何持續監視更改的任何文檔。
我該怎麼做?
看來這個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」事件,但您可能需要根據需要調整要觀察的事件類型。
感謝您的詳細回覆,我真的很感激它!所以我的邏輯會進入'function(snap){...},'? – Apollo
是的,沒錯。 NodeJS API與Firebase的JavaScript API相同,並且它非常有用。你可以在這裏查看如何檢索數據:https://www.firebase.com/docs/web/guide/retrieving-data.html – pkacprzak
很好的答案!請注意,[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)來使用該數據,在這種情況下不需要輪詢。 –