(30 hackdays day 1) Firebase – Rethink database

今天是第一天!按照以前的盤口數據,成功比失敗差很少是1:1,這,的確給了我很大的動力…這篇文章我會講述一個有意思的Real-time API服務,FirebaseLeanstack.io將這類服務稱爲realtime backend api,Firebase對本身的定位也是「A powerful API to store and sync data in realtime.」。但我以爲Firebase帶來的更是一種新型的「數據操做的思惟方式」。html

logo-Firebase_210_210.jpg

Firebase是什麼?

簡單的說,Firebase是一個簡化數據同步工做的API服務。現代的應用開發者常會用BaaS(Backend as a Service)來簡化開發工做,緣由很簡單:大部分後端工程師作的大部分事情都是重複的,但卻很容易漏洞百出的,並且擴展性須要徹底靠這些可能沒有幾年經驗的工程師來完成,基本會是個很脆弱的狀態。而在前端工程師得意於例如ParseJSAVOScloud這樣的服務,能夠更少的關心後端的時候,有一些蛋疼的應用又須要讓全部終端保持數據一致。那這時候Firebase就登場了!前端

Firebase可讓全部終端簡單的接入SDK後,就能夠訪問和操做一個雲中的統一數據庫。任何對其中數據的修改都會在極短的時間內通知到全部其餘在線的終端。git

Firebase能作什麼?

最簡單的應用場景就是聊天室啦。之前,想要寫一個聊天的App有多難?後端工程師須要設計至少兩個接口:Post message和Query message。而利用Firebase就能夠把後端這工程師踢掉了。經過簡單的建立一個聊天室Object(是的,Firebase中的數據只有Object,每一個應用都是一個巨大的Object)。把本身想發送的內容添加到這個Object的messages裏,相似chatroom.messages.push(‘啦啦啦’)。全部監聽註冊了這個chatroom的終端就都會獲得一個數據變更的Event,從而拿到這個新的chatroom.messages用來更新聊天室內容。github

哦對忘了說了,前端時間由於香港佔中一炮而紅的Firechat,其中Global聊天部分就是基於Firebase的。數據庫

如何入手

和全部的BaaS服務同樣,Firebase的Get Started極度易懂,推薦採用Javascript的教程走完前三步就夠了:Install,Save,Update。經過這三個步驟,一個Firebase的基本功能就展示出來了。後端

Object.set({ … }) 是直接生效的,不用再調用什麼Object.save()api

替代Object.get( … )的是Object.on(‘event’, function(data){ … })。開發者要思考的,再也不是我須要多久更新一下這個數據,而是能夠專一在每次拿到手頭這個Object的更新數據的時候,我須要實現什麼邏輯。服務器

我實現的Demo前端工程師

IMG_0020app

很早之前就想實現一個idea:我在臥室聽有聲小說的時候,忽然要去上廁所。這時候我只要走出臥室,小說聲音就會暫停,而當我走進廁所,廁所裏的一個手機會繼續臥室裏的播放進度繼續播放。也就是一個讓媒體播放能夠根據人的位置自動轉移的新型體驗。固然這也能夠擴展到視頻播放等。

檢測人位置的功能我用iBeacon來實現。在兩個距離較遠的位置放置兩臺pad,上面運行着一個個人應用。應用所作的事情很簡單:1. 檢測用戶距離多遠。2. 根據服務器的指令播放媒體內容。

iBeacon SDK能作到的就是時刻告訴我周圍的iBeacon設備距離我設備多遠。而服務器用這些數據來實時判讀到底應該在哪臺設備上播放媒體內容。

這裏Firebase的用法是

App將當前周圍iBeacon的信息實時保存(默認狀況下,每秒鐘都會保存一次最新的數據)在某一個表示當前pad的Object下,用beacons的一個子子Object來表示。其中包括每個iBeacon距離當前pad的距離。

一個Nodejs的Server。時刻檢查着當前全部連上服務器的pad有哪些。一旦這裏面有任何數據變化(某一個pad距離旁邊的某一個iBeacon距離變化都會形成到root Object的數據變化事件),就會運行一段JS來判斷當前哪一個pad離用戶最近,判斷一下以前哪一個pad在播放什麼內容。若是最近的pad有變化,則將以前播放中的pad暫停,指揮新的pad播放該內容。若是沒有在任何一個pad的範圍內,則全部App都不會播放。

App會作的另外一件事情就是根據當前所對應的Object下的一個域值:Settings裏的一些配置來決定是否要提升或者下降亮度。記得前面說的嗎,這個實現的方式並非Object.get(),而是Object.on(‘value’, callback),是否是很像JS裏的observe。有趣的地方就是,這裏的控制信號是經過一個相似數據庫裏的某個數值來完成的,而不是什麼遠程調用之類的。

總結

這樣一個idea,經過引入Firebase,將一個終端App退化成了一個Sensor+根據數據庫某個數值來改變view的簡單實現。而同步那堆亂七八糟的什麼的,徹底看不到了。是否是很酷~

Source code

相關文章
相關標籤/搜索