8

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

我想向客户发送带有一些自定义数据的事件。虽然流星非常擅长使用集合来执行此操作,但在这种情况下,不需要增加复杂性和存储。

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

我知道这对 sockjs 来说相当容易,但从服务器访问 sockjs 却非常困难。

Meteor.Error做类似的事情。

4

4 回答 4

4

该软件包现已弃用,不适用于 >0.9 的版本

您可以使用以下最初旨在从客户端-服务器-客户端广播消息的包

http://arunoda.github.io/meteor-streams/

没有collection,后面没有mongodb,用法如下(未测试):

stream = new Meteor.Stream('streamName'); // defined on client and server side

if(Meteor.isClient) {
    stream.on("channelName", function(message) {
      console.log("message:"+message);
    });
}

if(Meteor.isServer) {
    setInterval(function() {
      stream.emit("channelName", 'This is my message!');
    }, 1000);
}
于 2014-04-06T04:33:17.683 回答
2

应该使用集合。

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

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

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

于 2012-12-26T19:02:59.823 回答
1

我觉得 @Rui 和使用 Collection只是为了发送消息的事实感觉很麻烦。
同时,一旦您有几条这样的消息要发送,就可以方便地将一个名为“设置”或类似名称的集合保存在其中。


于 2015-07-24T15:22:59.150 回答
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);
于 2016-12-23T16:47:05.043 回答