我正在尝试为流星应用程序实现自己的自定义乒乓(流星已实现供内部使用的乒乓球,但我想引入自定义行为)。我发现向客户端发送数据的唯一方法是使用发布者,因此我设置了setInterval
,以带有pong的时间戳发送新的有效载荷,但是在每个新的订阅中都创建了一个新的{ {1}}。如何设置一个publish或setInterval?还是有其他方法可以向客户发送消息?
setInterval
答案 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
都会在服务器和客户端内存中创建一个新文档。这样,您将只管理一个文档并对更改做出相应的反应。