在Meteor中从服务器向客户端发送事件

时间:2012-10-26 13:49:43

标签: events meteor

是否有办法在不使用集合的情况下将事件从服务器发送到所有或部分客户端。

我想将带有一些自定义数据的事件发送给客户端。虽然meteor非常善于使用集合进行此操作,但在这种情况下,不需要增加复杂性和存储空间。

在服务器上,不需要Mongo存储或本地集合。 只需要提醒客户端它从服务器收到事件并根据数据采取相应行动。

我知道使用sockjs这很容易,但很难从服务器访问sockjs。

Meteor.Error做了类似的事情。

3 个答案:

答案 0 :(得分:2)

使用收藏。

如果您只是创建一个集合,向其添加一个属性并更新它,那么“增加的复杂性和存储”就不是一个因素。

集合只是服务器和客户端之间数据通信的一种形式,它们恰好构建在mongo上,如果你想像数据库那样使用它们,这真的很不错。但在最基本的情况下,它们只是一种说法“我想存储一些称为X的信息”,这种信息与您应该想要利用的发布/订阅体系结构挂钩。

将来,除了Mongo之外,还会公开其他数据库。我可以看到在某个阶段有一个智能包,可以将收藏夹剥离到最基本的功能,就像你提出的那样。也许你可以写出来!

答案 1 :(得分:1)

我觉得@Rui和使用Collection 发送消息的事实感觉很麻烦。
同时,一旦你有几个这样的消息发送,方便有一个名为 settings 或类似的集合,你保留这些。

答案 2 :(得分:1)

我找到的最佳套餐是Streamy。它允许您发送给每个人,或只发送给一个特定的用户

https://github.com/YuukanOO/streamy

meteor add yuukan:streamy

向所有人发送消息:

Streamy.broadcast('ddpEvent', { data: 'something happened for all' });

在客户端收听消息:

// Attach an handler for a specific message
Streamy.on('ddpEvent', function(d, s) {
  console.log(d.data);
});

向一个用户发送消息(通过ID)

var socket = Streamy.socketsForUsers(["nJyQvECmkBSXDZEN2"])._sockets[0]
Streamy.emit('ddpEvent', { data: 'something happened for you' }, socket);