Horizon是由RethinkDB团队开发的一款开源实时后端框架,它旨在让开发者们快速搭建可拓展的实时Web应用。Horizon于2016年5月17日正式发布。
HorizonHorizon包括以下特性:
-
Horizon服务端 ,由Node.js和RethinkDB构成,支持数据持久化,实时数据流,输入验证,用户认证和权限管理
-
Horizon客户端,开发者可以用于前端应用,将JSON数据存储到数据库中,执行请求,订阅在线更新等
-
**Horizon命令行 - hz
**,它会生成项目模板,启动一个本地的Horizon开发服务器,帮助你部署应用到云端 -
GraphQL支持 ,Horizon的服务端会由一个GraphQL适配器来驱动你的React或Relay应用,这将使你在一开始就不必写后端代码,它不会在v1发布,但是会在项目启动后尽快发布。
由于Horizon基于RethinkDB,所以它的集群能力得到了保障,具体测评可以参见这篇文章battle-tested clustering。同时,和Meteor的Galaxy类似,Horizon也提供了托管服务Horizon Cloud,现在处于内测阶段,不出意料的话,功能会包括RethinkDB和前端应用的一系列的监控,价格肯定不会比小VPS低啦。
Horizon和Firebase的不同
- Horizon开源,你可以将它部署到任何你想要的地方
- Horizon使你能够搭建复杂的企业应用,因为你由一个完整功能的数据库
- 借助于RethinkDB,Horizon能暴露出比起简单文档同步更有用的服务
Horizon和Meteor的不同
- Horizon更加灵活,Horizon可以轻松集成任何前端框架,并且服务端也可以集成Node.js, Python, Ruby等或者Rails, Express, Koa等框架。而Meteor集成这些东西需要黑魔法。
- Horizon只位于数据库和前端之间,Meteor是一个全栈的同构的体验。
- 在架构上也不一样,Meteor基于LiveQuery和MongoDB's oplog,它不能高效地处理大量操作。但是RethinkDB的LiveQuery功能是在数据库中的,这使得我们由更丰富的流处理,扩展起来也更加方便,因为数据库层面就有所有必要信息。
惊鸿一瞥
首先,全局安装horizon。
$ npm install -g horizon
然后,你可以使用hz init
创建模板项目。接着通过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。
社区
- 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
网友评论