Javascript 有没有什么方法可以让流星杂志发布?
我正在尝试为我的meteor应用程序实现我自己的定制乒乓球(meteor实现了一个供内部使用的乒乓球,但我想引入一个定制行为)。我发现向客户端发送数据的唯一方法是使用发布服务器,因此我设置了一个Javascript 有没有什么方法可以让流星杂志发布?,javascript,meteor,collections,publisher,meteor-publications,Javascript,Meteor,Collections,Publisher,Meteor Publications,我正在尝试为我的meteor应用程序实现我自己的定制乒乓球(meteor实现了一个供内部使用的乒乓球,但我想引入一个定制行为)。我发现向客户端发送数据的唯一方法是使用发布服务器,因此我设置了一个setInterval,以发送带有pong时间戳的新负载,但在每个新订阅中都创建了一个新的setInterval。如何仅设置一次发布或设置间隔?或者有其他方法向客户端发送消息 const COLLECTION_NAME = 'ping-pong'; const POLL_INTERVAL = 5000;
setInterval
,以发送带有pong时间戳的新负载,但在每个新订阅中都创建了一个新的setInterval
。如何仅设置一次发布或设置间隔?或者有其他方法向客户端发送消息
const COLLECTION_NAME = 'ping-pong';
const POLL_INTERVAL = 5000;
function pingPong(credentials) {
const pongSender = () => {
const id = _.uniqueId('pong-');
const payload = {
message: 'pong',
time: Date.now(),
};
this.added(COLLECTION_NAME, id, payload);
};
pongSender();
this.ready();
const interval = Meteor.setInterval(pongSender, POLL_INTERVAL);
this.onStop(() => {
Meteor.clearInterval(interval);
});
}
每个发布都单独处理,但您只能创建一个间隔,并让它更新发布句柄列表:
const pingPongSubscribed=[];
const pingPongIntervalId=setInterval(()=>{
pingPongSubscribed.forEach(句柄=>{
// ...
添加(集合名称、文档ID、有效负载);
});
}, 5000);
// ...
Meteor.publish('示例',函数(){
// ...
乒乓球预订。推(这个);
这个。在顶部(()=>{
pingPongSubscribed.splice(pingPongSubscribed.indexOf(this),1);
});
});
如果需要更多数据,只需将其保存在pingPongSubscribed
中即可。请记住,它将在与一台服务器的连接方面进行同步,而多个服务器实例不同步
也可以考虑使用<代码>更改< /代码>。每次使用添加的
都会在服务器和客户端内存中创建一个新文档。这样,您将只管理一个文档,并相应地对更改作出反应