有什么方法可以只设置流星发布的一个实例吗?
Is there some way to set just a instace of meteor publish?
我正在尝试为我的 meteor 应用程序实现我自己的自定义 ping-pong(meteor 实现了供内部使用的 ping-pong,但我想引入自定义行为)。我发现向客户端发送数据的唯一方法是使用发布者,所以我设置了一个 setInterval
,以发送带有 pong 时间戳的新有效负载,但在每个新订阅中都会创建一个新的 setInterval
。我怎么能只设置一个发布或 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(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
都会在服务器和客户端内存中创建一个新文档。这样您将只管理一个文档并相应地对更改做出反应。
我正在尝试为我的 meteor 应用程序实现我自己的自定义 ping-pong(meteor 实现了供内部使用的 ping-pong,但我想引入自定义行为)。我发现向客户端发送数据的唯一方法是使用发布者,所以我设置了一个 setInterval
,以发送带有 pong 时间戳的新有效负载,但在每个新订阅中都会创建一个新的 setInterval
。我怎么能只设置一个发布或 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(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
都会在服务器和客户端内存中创建一个新文档。这样您将只管理一个文档并相应地对更改做出反应。