有什么方法可以设置流星发布实例吗?

时间:2019-06-28 18:16:49

标签: javascript meteor collections publisher meteor-publications

我正在尝试为流星应用程序实现自己的自定义乒乓(流星已实现供内部使用的乒乓球,但我想引入自定义行为)。我发现向客户端发送数据的唯一方法是使用发布者,因此我设置了setInterval,以带有pong的时间戳发送新的有效载荷,但是在每个新的订阅中都创建了一个新的{ {1}}。如何设置一个publish或setInterval?还是有其他方法可以向客户发送消息?

setInterval

1 个答案:

答案 0 :(得分:2)

每个发布都是单独处理的,但是您只能创建一个间隔并让其更新发布句柄的列表:

const pingPongSubscribed = [];
const pingPongIntervalId = setInterval(() => {
  pingPongSubscribed.forEach(handle => {
    // ...
    handle.added(COLLECTION_NAME, DOCUMENT_ID, payload);
  });
}, 5000);

// ...

Meteor.publish('example', function () {
  // ...
  pingPongSubscribed.push(this);
  this.onStop(() => {
    pingPongSubscribed.splice(pingPongSubscribed.indexOf(this), 1);
  });
});

如果您需要更多数据,只需将其保存在pingPongSubscribed中即可。请记住,它将在与一台服务器的连接方面进行同步,并且会同步多个服务器实例。

此外,请考虑改用changed。每次使用added都会在服务器和客户端内存中创建一个新文档。这样,您将只管理一个文档并对更改做出相应的反应。