Horizon是由RethinkDB團隊開發(fā)的一款開源實時后端框架声怔,它旨在讓開發(fā)者們快速搭建可拓展的實時Web應用态贤。Horizon于2016年5月17日正式發(fā)布。
Horizon包括以下特性:
Horizon服務端 醋火,由Node.js和RethinkDB構成悠汽,支持數(shù)據(jù)持久化箱吕,實時數(shù)據(jù)流,輸入驗證柿冲,用戶認證和權限管理
Horizon客戶端茬高,開發(fā)者可以用于前端應用,將JSON數(shù)據(jù)存儲到數(shù)據(jù)庫中假抄,執(zhí)行請求怎栽,訂閱在線更新等
**Horizon命令行 - hz
**,它會生成項目模板宿饱,啟動一個本地的Horizon開發(fā)服務器熏瞄,幫助你部署應用到云端GraphQL支持 ,Horizon的服務端會由一個GraphQL適配器來驅動你的React或Relay應用谬以,這將使你在一開始就不必寫后端代碼强饮,它不會在v1發(fā)布,但是會在項目啟動后盡快發(fā)布为黎。
由于Horizon基于RethinkDB邮丰,所以它的集群能力得到了保障,具體測評可以參見這篇文章battle-tested clustering铭乾。同時柠座,和Meteor的Galaxy類似,Horizon也提供了托管服務Horizon Cloud片橡,現(xiàn)在處于內測階段,不出意料的話淮野,功能會包括RethinkDB和前端應用的一系列的監(jiān)控捧书,價格肯定不會比小VPS低啦。
Horizon和Firebase的不同
- Horizon開源骤星,你可以將它部署到任何你想要的地方
- Horizon使你能夠搭建復雜的企業(yè)應用经瓷,因為你由一個完整功能的數(shù)據(jù)庫
- 借助于RethinkDB,Horizon能暴露出比起簡單文檔同步更有用的服務
Horizon和Meteor的不同
- Horizon更加靈活洞难,Horizon可以輕松集成任何前端框架舆吮,并且服務端也可以集成Node.js, Python, Ruby等或者Rails, Express, Koa等框架。而Meteor集成這些東西需要黑魔法队贱。
- Horizon只位于數(shù)據(jù)庫和前端之間色冀,Meteor是一個全棧的同構的體驗。
- 在架構上也不一樣柱嫌,Meteor基于LiveQuery和MongoDB's oplog锋恬,它不能高效地處理大量操作。但是RethinkDB的LiveQuery功能是在數(shù)據(jù)庫中的编丘,這使得我們由更豐富的流處理与学,擴展起來也更加方便彤悔,因為數(shù)據(jù)庫層面就有所有必要信息。
驚鴻一瞥
首先索守,全局安裝horizon晕窑。
$ npm install -g horizon
然后,你可以使用hz init
創(chuàng)建模板項目卵佛。接著通過hz serve --dev
啟動Horizon服務器和RethinkDB實例杨赤。RethinkDB需要安裝好并且要能在PATH目錄訪問。
$ hz init myapp
$ hz serve myapp --dev
# localhost:8181 has a demo page on it
# Horizon client connections can be made to ws://localhost:8181/horizon# The horizon client library is served from localhost:8181/horizon/horizon.js
Horizon的代碼看上去如下:
// Connect to horizon
const horizon = Horizon();
const todoCollection = horizon('todo_items');
const todoApp = document.querySelector('#app')
// Function called when a user adds a todo item in the UI
todoCollection.watch().subscribe( todos => {
const todoHTML = todos.map(todo =>
`<div class="todo" id="${todo.id}">
<input type="checkbox" ${todo.done ? 'checked' : ''}>
${todo.text} -- ${todo.date}
</div>`);
todoApp.innerHTML = todoHTML.join('');
});
更多信息請參見 Getting Started guide级遭。
社區(qū)
- The Horizon.io website
- The official Horizon forum
- The Horizon project and issue tracker on GitHub
- The #horizon channel in our RethinkDB Slack group
- Follow us on Twitter: @horizonjs