初识 Meteor

最近发现了个很有趣、很强大的东西 Meteor,这一个构建在 Node.js 和 MongoDB 之上的,用于构建 Web 端和移动端实时应用的 Full Stack 开源平台。Meteor 位于程序数据库和用户界面之间,保持二者之间的数据同步更新。Meteor 在客户端和服务器端都使用 JavaScript 作为开发语言,因此代码能在前后两端共用。Meteor 还有活跃的社区和丰富的第三方packages 支持。

Meteor 的安装非常简单,只需要一条命令(当然是在已经安装了 Node.js 的情况下,否则先安装 Node.js):

1
$ curl https://install.meteor.com/ | sh

安装好之后,就可以用来构建有趣的应用了。Meteor 自带了几个样例可以试用、参考。

1
2
3
4
5
6
7
8
$ meter create --list
Available examples:
clock
leaderboard
localmarket
todos

Create a project from an example with 'meteor create --example <name>'.

其中,todos 是一个 Todos 应用, 列出了 Meteor 的主要特性。按照上面提示创建 Todos, 并运行:

1
2
3
4
5
6
7
8
9
10
$ meter create --example todos
$ cd todos
$ meteor
[[[[[ ~/program/meteor/todos ]]]]]

=> Started proxy.
=> Started MongoDB.
=> Started your app.

=> App running at: http://localhost:3000/

在浏览器打开http://localhost:3000/

Meteor todos

  • Data on the Wire. Meteor 并不在网络上发生HTML,而是将一切‘编译’成 JavaScriptCSS 再交给 Client(比如浏览器) 渲染。

  • One Language. Meteor 在 Server 和 Client 端都用 JavaScript

  • Database Everywhere. Meteor 的 Client 端有自己的 Database–Minimongo,Client 只与自己本地的 Minimongo 进行数据交互。Meteor 使用一种 Pub/Sub 模型来控制 MongoDB 服务器与 Minimongo 客户端之间同步的数据。默认情况下,所有服务器端 Meteor 集合都会被发布。Meteor 使用 DDP(Distributed Data Protocol,分布式数据协议)在客户端与服务器之间移动数据。

  • Latency Compensation. 在 Client 端,Meteor 会预抓取(prefetch)数据,然后模拟出像是 Server 端及时响应过来的。Minimongo 使用 latency compensation 来反映数据库更改,从根本上讲,延迟补偿是大数据管理领域中的 最终一致性概念的一种视觉表现。当通过 Minimongo stub 更新客户端上的数据时,任何更改都会立即在客户端上反映出来,包括反应性重新呈现。这些更改还会被传播到服务器。但是,传播的更改可能会失败,失败的原因有很多,包括拒绝访问。Pub/Sub 机制负责确保客户端最终(通常很快)反映了服务器的实际状态。延迟补偿可实现一种无需等待的、响应非常迅速的 UI,这是现代 Web 2.0 应用程序的一个鲜明特征。而代价可能是出现短暂的视觉数据不一致性。

  • Full Stack Reactivity. Meteor 中从数据库(database)到模板层(template)一切变化都是实时的,任何更新都会自动同步。

  • Embrace the Ecosystem. Meteor 是一个开源平台,同时集成了许多优秀的开源工具和框架,比如能通过命令 meteor add-platform androidmeteor add-platform ios 分别添加 Android 和 iOS 模拟器。

  • Simplicity Equals Productivity.

与传统的LAMP(或LEMP)架构不同,Meteor 实际上采用 Pub/Sub 机制,以 Database Everywhere方式,在 Server 端为 MongoDB,在 Client 端为 Minimongo;借助 Websocket 在 Server 端和 Client 端之间实现永久连接;Client 只与本地 Minimongo进行数据操作,因此速度非常快,同时以 Ajax 方式通过 Websocket 与 Server实现数据同步。

Meteor 是如此的强大,它将当前最新、最先进技术组合起来,使用起来却非常方便快捷,非常值得学习和使用。而本文只是对 Meteor 的简单介绍,还需要对其进一步深入的学习和使用。

主要的学习资料: