Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有什么方法可以让流星杂志发布?_Javascript_Meteor_Collections_Publisher_Meteor Publications - Fatal编程技术网

Javascript 有没有什么方法可以让流星杂志发布?

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;

我正在尝试为我的meteor应用程序实现我自己的定制乒乓球(meteor实现了一个供内部使用的乒乓球,但我想引入一个定制行为)。我发现向客户端发送数据的唯一方法是使用发布服务器,因此我设置了一个
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
中即可。请记住,它将在与一台服务器的连接方面进行同步,而多个服务器实例不同步

也可以考虑使用<代码>更改< /代码>。每次使用添加的

都会在服务器和客户端内存中创建一个新文档。这样,您将只管理一个文档,并相应地对更改作出反应