(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带来的更是一种新型的“数据操作的思维方式”。

Firebase是什么?

简单的说,Firebase是一个简化数据同步工作的API服务。现代的应用开发者常会用BaaS(Backend as a Service)来简化开发工作,原因很简单:大部分后端工程师做的大部分事情都是重复的,但却很容易漏洞百出的,而且扩展性需要完全靠这些可能没有几年经验的工程师来完成,基本会是个很脆弱的状态。而在前端工程师得意于例如ParseJSAVOScloud这样的服务,可以更少的关心后端的时候,有一些蛋疼的应用又需要让所有终端保持数据一致。那这时候Firebase就登场了!

Firebase可以让所有终端简单的接入SDK后,就可以访问和操作一个云中的统一数据库。任何对其中数据的修改都会在极短的时间内通知到所有其他在线的终端。

Firebase能做什么?

最简单的应用场景就是聊天室啦。以前,想要写一个聊天的App有多难?后端工程师需要设计至少两个接口:Post message和Query message。而利用Firebase就可以把后端这工程师踢掉了。通过简单的创建一个聊天室Object(是的,Firebase中的数据只有Object,每个应用都是一个巨大的Object)。把自己想发送的内容添加到这个Object的messages里,类似chatroom.messages.push(‘啦啦啦’)。所有监听注册了这个chatroom的终端就都会得到一个数据变动的Event,从而拿到这个新的chatroom.messages用来更新聊天室内容。

哦对忘了说了,前端时间因为香港占中一炮而红的Firechat,其中Global聊天部分就是基于Firebase的。

如何入手

和所有的BaaS服务一样,Firebase的Get Started极度易懂,推荐采用Javascript的教程走完前三步就够了:Install,Save,Update。通过这三个步骤,一个Firebase的基本功能就展现出来了。

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

替代Object.get( … )的是Object.on(‘event’, function(data){ … })。开发者要思考的,不再是我需要多久更新一下这个数据,而是可以专注在每次拿到手头这个Object的更新数据的时候,我需要实现什么逻辑。

我实现的Demo

IMG_0020

很早以前就想实现一个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 https://github.com/fxp/flowapp

(30 hackdays day 1) Firebase – Rethink database”的一个响应

Add yours

  1. 很棒的开始,加油加油~看来主要不在于学习,还是做project呀,firebase有啥可学的……

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s

在WordPress.com的博客.

向上 ↑

%d 博主赞过: