我实际上已经玩弄了Meteor一段时间,但我意识到我仍然缺乏一些(或很多!)对这个主题的理解.
例如,这是一个使用node.js/express/socket.io进行简单实时聊天的教程:http://net.tutsplus.com/tutorials/javascript-ajax/real-time-chat-with -nodejs插槽-IO-和expressjs /
在上面的示例中,通过socket.io,Web服务器接收一些数据并将其传递到所有连接的客户端 - 所有这些都没有任何数据库访问.
使用Meteor,在我看到的所有示例中,通过写入mongodb来更新客户端,mongodb然后更新所有客户端.但是,如果我不需要将数据写入数据库呢?将数据传递给所有客户端似乎是一个昂贵的步骤.
我相信我在这里遗漏了一些东西.更新所有客户端的Meteor方式是什么(比如简单的聊天应用程序),但不需要先花费数据写入数据库?
谢谢!
Aks*_*hat 10
目前还没有正式的方法将数据发送给客户而不将其写入集合.它在流星中有点小问题,因为当没有可写入的地方时,将数据发送到多个客户端的步骤来自多个流星一起使用时.即从一个流星发送的物品不会来到另一个订购的客户.
有一个使用Meteor Streams(http://meteorhacks.com/introducing-meteor-streams.html)的临时解决方案可以让你做你想做的事情而不用同时写入数据库.
如果您想了解一些技术细节,还可以在流星谈话(https://groups.google.com/forum/#!topic/meteor-talk/Ze9U9lEozzE)上进行相当广泛的讨论.当链接器分支合并到主服务器时,对于单个服务器,这实际上是可能的
这里有一个虚拟收藏的方法,它不完美,但它可以做到直到Meteor有一个更完美的方式完成它.
Meteor.publish("virtual_collection", function() {
this.added("virtual_coll", "some_id_of_doc", {key: "value"});
//When done
this.ready()
});
Run Code Online (Sandbox Code Playgroud)
然后在客户端订阅:
var Virt_Collection = new Meteor.Collection("virtual_coll");
Meteor.subscribe("virtual_collection");
Run Code Online (Sandbox Code Playgroud)
然后,您可以在订阅完成时运行此命令:
Virt_Collection.findOne();
=> { _id: "some_id_of_doc", key: "value"}
Run Code Online (Sandbox Code Playgroud)
这有点乱,但你也可以挂钩来更新或删除集合.至少这种方式虽然你不会使用任何插件或包.
有关更多详细信息和视频示例,请参阅:https://www.eventedmind.com/posts/meteor-how-to-publish-to-a-client-only-collection.
服务器上的发布功能将数据发送给客户端.它有一些方便的快捷方式来从数据库发布查询结果,但您不必使用它们.publish函数有this.added(),this.removed()和this.changed(),允许您发布您选择的任何内容.然后,客户端订阅并接收已发布的数据.
例如:
if ( Meteor.isClient ){
var someMessages = new Meteor.Collection( "messages" ); //messages is name of collection on client side
Meteor.subscribe ( "messagesSub" ); //messagesSub tells the server which publish function to request data from
Deps.autorun( function(){
var message = someMessages.findOne({});
if ( message ) console.log( message.m ); // prints This is not from a database
});
}
if (Meteor.isServer ) {
Meteor.publish( "messagesSub", function(){
var self = this;
self.added ( "messages", "madeUpId1", { m: "This is not from a database"} ); //messages is the collection that will be published to
self.ready();
});
}
Run Code Online (Sandbox Code Playgroud)
有流星文档说明的例子在这里和另一个例子在这里.我还有一个示例,它在客户端之间共享数据,而不使用数据库只是为了教我自己如何发布和订阅.除了基本的流星之外什么也没用过.
| 归档时间: |
|
| 查看次数: |
3375 次 |
| 最近记录: |