接收 n 个主题更新,其中 n = 1+ 该主题的已关闭订阅数
Receiving n topic updates, where n = 1+number of closed subscription to that topic
我的 JavaScript 客户订阅了一个主题。如果我取消订阅然后重新订阅,那么对于该主题的每一次更新,我都会将两次更新发送给客户。
实际上,只要有一个当前订阅,当主题更改时,对于每一个订阅-取消订阅对,我都会收到一个更新。
例如
- 订阅
topic/a
topic/a
更改 & 一个 更新交付
- 取消订阅 topic/a
topic/a
更改且未提供更新
- 订阅
topic/a
topic/a
更改 & 两个 已交付更新
- 取消订阅 topic/a
topic/a
更改且未提供更新
- 订阅
topic/a
topic/a
项更改和 3 项 项更新已交付
如何每次更新只收到一个通知?
当您订阅时,客户端使用 Subscription Stream 来监听不同的事件。我们感兴趣的事件是 update
和 unsubscribe
事件。当您订阅时,您会自动告诉流监听 update
事件。
如果您订阅不止一次,根据您的订阅方式,您可以创建多个流,每个流都将接收 update
个事件。
例如,以下打开两个流:
subscription = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
subscription2 = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
而以下只打开一个流:
subscription = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
session.unsubscribe('test/topic');
session.subscribe('test/topic');
当客户端取消订阅某个主题时,该主题的所有流都不再侦听 update
事件。但是,如果客户端再次订阅,该主题的所有流将再次侦听 update
个事件。
您可以在取消订阅时关闭流,这样当您再次 subscribe
时它就不会监听更新。这是通过侦听流上的 unsubscribe
事件并从其中调用流上的 close() 来实现的。
例如:
subscription = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
subscription.on('unsubscribe', function(reason, topic) {
console.log('Unsubscribed from topic:' + topic);
subscription.close();
});
subscription2 = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
session.unsubscribe('test/topic');
session.subscribe('test/topic');
在这个例子中,当 unsubscribe
被调用时 subscription
被关闭。当随后调用 subscribe
时,只有 subscription2 会侦听更新。
这段代码也可以用对象字面量表达得更简洁:
subscription = session.subscribe('test/topic').transform(String).on({
update : function(update, topic) {
console.log('Got update for topic: ' + topic, update);
},
unsubscribe : function(reason, topic) {
console.log('Unsubscribed from : ' + topic);
subscription.close();
}
});
subscription2 = session.subscribe('test/topic').transform(String).on({
update : function(update, topic) {
console.log('Got update for topic: ' + topic, update);
}
});
session.unsubscribe('test/topic');
session.subscribe('test/topic');
我的 JavaScript 客户订阅了一个主题。如果我取消订阅然后重新订阅,那么对于该主题的每一次更新,我都会将两次更新发送给客户。
实际上,只要有一个当前订阅,当主题更改时,对于每一个订阅-取消订阅对,我都会收到一个更新。
例如
- 订阅
topic/a
topic/a
更改 & 一个 更新交付- 取消订阅 topic/a
topic/a
更改且未提供更新- 订阅
topic/a
topic/a
更改 & 两个 已交付更新- 取消订阅 topic/a
topic/a
更改且未提供更新- 订阅
topic/a
topic/a
项更改和 3 项 项更新已交付
如何每次更新只收到一个通知?
当您订阅时,客户端使用 Subscription Stream 来监听不同的事件。我们感兴趣的事件是 update
和 unsubscribe
事件。当您订阅时,您会自动告诉流监听 update
事件。
如果您订阅不止一次,根据您的订阅方式,您可以创建多个流,每个流都将接收 update
个事件。
例如,以下打开两个流:
subscription = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
subscription2 = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
而以下只打开一个流:
subscription = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
session.unsubscribe('test/topic');
session.subscribe('test/topic');
当客户端取消订阅某个主题时,该主题的所有流都不再侦听 update
事件。但是,如果客户端再次订阅,该主题的所有流将再次侦听 update
个事件。
您可以在取消订阅时关闭流,这样当您再次 subscribe
时它就不会监听更新。这是通过侦听流上的 unsubscribe
事件并从其中调用流上的 close() 来实现的。
例如:
subscription = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
subscription.on('unsubscribe', function(reason, topic) {
console.log('Unsubscribed from topic:' + topic);
subscription.close();
});
subscription2 = session.subscribe('test/topic').transform(String)
.on('update', function(value, topicName) {
console.log('Got update for topic: ' + topicName, value);
});
session.unsubscribe('test/topic');
session.subscribe('test/topic');
在这个例子中,当 unsubscribe
被调用时 subscription
被关闭。当随后调用 subscribe
时,只有 subscription2 会侦听更新。
这段代码也可以用对象字面量表达得更简洁:
subscription = session.subscribe('test/topic').transform(String).on({
update : function(update, topic) {
console.log('Got update for topic: ' + topic, update);
},
unsubscribe : function(reason, topic) {
console.log('Unsubscribed from : ' + topic);
subscription.close();
}
});
subscription2 = session.subscribe('test/topic').transform(String).on({
update : function(update, topic) {
console.log('Got update for topic: ' + topic, update);
}
});
session.unsubscribe('test/topic');
session.subscribe('test/topic');