当您订阅时,客户端使用订阅流来监听不同的事件。我们感兴趣的事件是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
,仅订阅 2 侦听更新。
这段代码也可以使用对象文字更简洁地表达:
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');