观看了Meteor Framework screencast。我注意到更改数据库无缝地更改了浏览器中的数据。通常是AJAX,只需每隔几秒重新加载一部分页面,但在这里我没有注意到浏览器重新加载。他们是如何在流星中实现这一目标的?是Node.js依赖吗?
更新:Toby Catlin提出了另一个有趣的问题。 Meteor如何处理不同的浏览器?
答案 0 :(得分:17)
他们同时使用Session
和Meteor.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的典型异步回调样式运行。我们发现线性执行模型更适合Meteor应用程序中的典型服务器代码。
答案 1 :(得分:5)
有一些技术允许服务器将数据推送到浏览器而无需浏览器请求它。这种技术的术语是Comet [wikipedia.org],大多数技术都与AJAX有关(有一种称为Comet的漂白剂和一种名为Ajax的清洁产品)。有许多连接类型:长轮询,流式XHR,永久帧,服务器发送事件和websockets。 Socket.IO是一个很好的库,它为流服务器提供连接类型。
您确实需要一台支持Comet连接的服务器。您可以谷歌搜索当前的但不在我的头顶:node.js,tornado,cometd,orbited,Jetty streaming
我猜想Metor会根据浏览器的功能使用不同的连接类型,例如Chrome的websocket和IE的长轮询。如果有人能提出更具体的答案我会感兴趣