12

看过 Meteor Framework的截屏视频。我注意到更改数据库会无缝更改浏览器中的数据。通常 AJAX,只是每隔几秒钟重新加载页面的一部分,但在这里我没有注意到浏览器重新加载。他们是如何在 Meteor 中做到这一点的?它是否依赖于 Node.js?

更新:托比卡特林提出了另一个有趣的问题。Meteor 如何处理不同的浏览器?

4

2 回答 2

17

他们同时使用SessionMeteor.autosubscribe(来自 Meteor API)来确保更改反映在客户端上。

这些 Meteor API 使用 SockJS 的 XHR (XMLHttpRequest)。SockJS 是 WebSocket 仿真实用程序。因此,当服务器发生变化时,SockJS 会确保发送 XHR,并且变化的数据在 JSON 响应中。

是的,Meteor 完全依赖于 Node.js。来自 Meteor 文档:

Meteor 应用程序是在客户端 Web 浏览器中运行的 JavaScript、在 Node.js 容器内的 Meteor 服务器上运行的 JavaScript 以及所有支持的 HTML 片段、CSS 规则和静态资产的混合体。Meteor 使这些不同组件的包装和传输自动化。而且,您可以非常灵活地选择如何在文件树中构建这些组件。

唯一的服务器资产是 JavaScript。Meteor 收集所有 JavaScript 文件,不包括客户端和公共子目录下的任何内容,并将它们加载到纤程内的 Node.js 服务器实例中。在 Meteor 中,您的服务器代码在每个请求中运行在一个线程中,而不是以 Node.js 典型的异步回调样式。我们发现线性执行模型更适合 Meteor 应用程序中的典型服务器代码。

来源:http ://docs.meteor.com/和https://github.com/meteor/meteor

于 2012-04-11T14:11:53.400 回答
5

有一些技术可以让服务器在浏览器不需要请求的情况下将数据推送到浏览器中。这种技术的术语是Comet [wikipedia.org],大多数技术都与 AJAX 相关(有一种叫做 Comet 的漂白剂和一种叫做 Ajax 的清洁产品)。有许多连接类型:长轮询、流式 XHR、永远帧、服务器发送事件和 websocket。Socket.IO 是一个很好的库,它为流服务器提供连接类型。

您确实需要支持 Comet 连接的服务器。你可以用谷歌搜索当前的,但我不知道:node.js、tornado、cometd、orbited、Jetty streaming

我猜 Metor 会根据浏览器的功能使用不同的连接类型,例如 Chrome 的 websocket 和 IE 的长轮询。如果有人可以给出更具体的答案,我会感兴趣

于 2012-04-11T14:05:34.387 回答