[译] Introducing Horizon: build realtime apps without writing backend code

简介:
原文: Introducing Horizon: build realtime apps without writing backend code

今天我们非常荣幸地宣布 Horizon 第一次正式发布,一个开源的后端服务,可以帮助开发者构建和扩展实时 web 应用,Horizon 包括:

  • 一个使用 Nodejs 和 RethinkDB 构建的后端服务器,支持数据持久化,实时流,输入校验,用户认证,还有权限体系
  • 一个 JavaScript 客户端库,开发者可以在前端将 json 文档存储到数据库中,执行查询,以及订阅实时更新
  • 一个命令行工具,可以生成项目模板,启动一个本地的 Horizon 开发服务器,还能帮助你将自己的 Horizon 应用部署到云端

Horizon 服务器是一个完整的后端服务,开发者可以用来驱动他们的应用。它非常适合用来实现快速原型:简单地通过命令行运行 Horizon 服务器,利用 Horizon 客户端库来提升你前端的用户体验。有了 Horizon,前端开发者不写一行后端代码就能开发出一个完整的应用。

Horizon 是一个开源软件,就是说你可以按照自己的喜好使用和修改。开发的时在自己的笔记本上运行一个本地实例,之后可以部署到任何你想到部署的地方:低廉的 VPS 主机,公有云,或者你自己的裸机上。Horizon 依靠 RethinkDB 可靠的集群,在你用户增长之后可以很方便地进行扩展。

除了开源的 Horizon 后端,我们还构建了一个可以用来部署,管理和扩展 Horizon 应用的云服务,Horizon Cloud 管理 Horizon 后端服务和底层的 RethinkDB 数据库,还能按照需求自动进行扩展。Horizon Cloud 还对备份和恢复,不停机版本更新,监控和其他实用功能提供了内置支持。开发者可以使用 Horizon 命令行工具将自己的应用部署到 Horizon Cloud。Horizon Cloud 目前还处于内测阶段,但用不了多久就会和大家见面。

为什么是 Horizon

去年在介绍 RethinkDB 1.16 带来的 changefeeds 时,我们分享了推动实时 web 的计划。不再需要通过轮询的方式获取数据更新,开发者可以告诉数据库将应用的实时结果作为持续的流推送过来。当我们与用户分享这一功能时,有个问题翻来覆去地被问起:我可以从浏览器的 web 应用中直接访问 RethinkDB 的实时更新吗?

changefeeds 在最开始是为后端开发者设计的 ,由他们决定如何将实时更新传输到前端。在我们推出这个功能后不久,我们开始琢磨如果能将实时数据流直接暴露给浏览器会不会非常牛逼。WebSocket 抽象库, GraphQL 那样的新数据检索技术,以及 RxJS Observables 强大的异步流本源,给前端提供了新的si去检索和处理数据。Web 应用正在不断进化,早已超出 REST 和 XMLHttpRequest 所能承载的能力。Horizon 是为未来而生,它用实时数据流贯通数据库和前端。

Horizon 能减少开发人员在构建和扩展 web 应用时面对的麻烦。它消除了重复的模板和繁琐的步骤,就像手写 CRUD 端点,用户认证,以及 session 管理。我们致力于填补数据持久层和前端之间的鸿沟,将开发者从不断发明轮子的轮回中解脱出来,使其能把更多的时间集中在实现业务逻辑上。

上手 Horizon

开始使用 Horizon 之前,先要从 NPM 上安装 Horizon 库包,其中包含了一个名为 hz 的命令行工具,你可以用它来生成和运行你的首个项目。你可以在Horizon 官网找到详细安装说明简明教程

Horizon 客户端库提供了简明的 API,你可以通过链式方法表达数据库查询。查询返回 RxJS Observables,便于你对流查询结果进行合并和处理。在这背后,Horizon 的数据集合基于 RethinkDB 的表。在开发模式下运行 Horizon 时,服务器将自动创建所需的表和索引。

下面的例子展示了如何在浏览器或其他前端环境使用 Horizon 客户端库。这段代码展示了如何将 JSON 文档存储在一个 Horizon 集合中,以及从集合记录中获取一个过滤后的子集:

var horizon = Horizon();
var messages = horizon("messages");
messages.store({
  sender: "Bob",
  time: new Date(),
  text: "Hello, World!"
});
messages.findAll({sender: "Bob"}).fetch()
        .subscribe(m => console.log(m));

如果想不停地执行查询并获得实时更新的流数据,只需要使用 `watch` 方法,接下来的例子便展示了如何通过 Horizon 查询来实现在线游戏中的实时排行榜:

var users = horizon("users");
users.order("score", "descending").limit(5).watch()
     .subscribe(items => console.log(items))

上边的查询按照用户的分数倒序排列并给出前五名。每当数值发生变化,`subscribe` 回调将获得一个包含更新内容的完整数组,它会自动维护排序顺序,并根据需要添加和删除用户。

Horizon 服务器将客户端的查询翻译成 ReQL,即 RethinkDB 的查询语言。查询翻译过程中利用自动生成的索引,最大限度提高效率和性能。Horizon 查询语言设计的要比 ReQL 简单易用,易于开发者学习和进行服务器优化。下面是支持的命令列表:

  • find, findAll
  • above, below, limit, order
  • remove, removeAll
  • store, upsert, replace
  • watch, fetch

你可以查阅 Horizon 文档 来学习更多关于客户端库 API 的用法。我们正着手一系列的改进,提高查询语言的能力和表现力,比如一个特性就是可以使你将多个查询组合到模型关系中。

整合 Horizon 与 Javascript 生态系统

Horizon 不具有强制性也不会自以为是--它本身就被设计成能与你了解喜爱的 JavaScript 框架配合使用的。Horizon 服务器具有很强可扩展性,就是说,想定制后端服务的开发者可以根据自己的需要将 Horizon 嵌入到 Node.js 应用中,还可以按照需要添加新功能。你甚至可以将 Horizon 整合到现有的 Node.js 后端应用中,可以和常规的框架比如 Express,Koa,Hapi 等愉快的玩耍。

Horizon 客户端库使用一个简单的基于 WebSocket 的协议与服务器进行通信,不过我们提供了一个纯净的抽象层,你不必管理持久性连接,也不用关心 WebSockets 具体怎么工作。Horizon 客户端库可以很好地搭配任何前端框架使用,如 React,Angular,Ember,以及 vanilla JavaScript(全球最流行的 JavaScript 框架 :)。你还可以与 redux 那样的前端状态管理器搭配使用。

你可以在 Horizon 的官方 Github 仓库找到一个示例,展示了如何把 Horizon 与形形色色的前端和后端的框架整合到一起。React 开发者还可以去看一下 lovli.js,一个由 Patrick Neschkudla 编写的实用模板,其中用到了 Horizon,React,以及 Redux。

我们期待某一天能将 Horizon 客户端库搬到移动平台上,我们也在积极的与社区合作,以确保 Horizon JavaScript 客户端能在 Electron 和 React Native 上正常工作。JavaScript 正在渗透到各个地方,从嵌入式物联网系统到桌面和移动应用程序。我们相信 Horizon 能提供一些理由让开发者选择 JavaScript。

此外,我们还为客户端库与 Horizon 后端通信的底层协议编写了文档。开发者可以利用该协议构建其他语言版本的客户端库。该协议包括简单的JSON文件。它基于 engine.io,一个支持多个网络传输的实时框架。

规划

今天发布的 Horizon 只是一个起点,远不是最终的目标。你会在项目进度中看到新功能和改进。现有功能包括:查询,实时更新,认证,权限体系,以及对静态资源的支持。

一些主打功能还不够成熟。权限系统和校验支持是近期刚加入的,很晚才列入到开发周期中。在我们着手改进这些功能的时候,你可能会遇到一些不完善的地方。

长期规划仍在不断壮大,不过下面这个列表,是我们希望在未来的版本中包含的功能:

你可以关注 Horizon forum 上的日常更新,我们会努力完善这些功能和稳定 Horizon 的代码。

社区参与

我们期待着与你的合作,我们以推进实时 web 的发展为己任。


目录
相关文章
|
开发框架 .NET
Deployment of VC2008 apps without installing anything
If you create a default CRT/MFC application with VS2008, this application will not run on other computers.
1145 0
|
并行计算
Howto: Deploy VC2008 apps without installing vcredist_x86.exe
There are several reasons for xcopy deployment of an application (also known as application local). One main reason is that you are independent of what the target computer has installed.
958 0
|
11天前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
141 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
27天前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
116 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
11天前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
884 14
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
16天前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
121 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
24天前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
75 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
14天前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
37 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
81 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 4
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 5
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 7
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 8
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 9
    阿里云APP备案流程图以及备案所需材料整理,跟着教程一步步操作
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 4
    【Azure Function】Function App门户上的Test/Run返回错误:Failed to fetch
    31
  • 5
    陪玩APP推送配置:陪玩系统手机锁屏收不到推送?可能是这些原因!解决方案来了!
    34
  • 6
    小游戏源码开发之可跨app软件对接是如何设计和开发的
    33
  • 7
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
    135
  • 8
    PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
    60
  • 9
    语音app系统软件源码开发搭建新手启蒙篇
    44
  • 10
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
    884