最近发现了个很有趣、很强大的东西 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 | $ meter create --list |
其中,todos
是一个 Todos 应用, 列出了 Meteor 的主要特性。按照上面提示创建 Todos, 并运行:
1 | $ meter create --example todos |
在浏览器打开http://localhost:3000/
:
Data on the Wire. Meteor 并不在网络上发生HTML,而是将一切‘编译’成
JavaScript
和CSS
再交给 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 android
和meteor 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 的简单介绍,还需要对其进一步深入的学习和使用。
主要的学习资料:
- 官方文档当然通常都是最权威的;
- Meteor 开发者团队出的 Discover Meteor 也是非常值得推荐的资料;
- Meteor Forums;
- 使用,并在 Gitgub 上为 Meteor 贡献代码。