在发布更新之前,主题订阅者可能什么也得不到
Topic subscribers may get nothing until an update is published
我正在构建一个发布金融工具价格的系统。有些仪器每秒更新几次,有些仪器更新频率较低。无论更新频率如何,所有订阅者都需要查看该工具的最后更新或当前价格。
订阅者可能会等待一段时间才能看到所有主题的主题更新,从而使他们对较慢主题的看法为空。我可以使用 SessionPropertiesListener
来收听新的观众成员,然后用当前价格更新每个主题,但这会为现有的观众成员产生 lot 的噪音,感觉就像尾巴在摇狗
我可以用一个慢慢更新的话题来说明我的问题:
#!/usr/local/bin/node
var diffusion = require('diffusion');
const diffHost = "localhost";
const exampleTopic = "some/counter";
diffusion.connect({
host : diffHost,
port: 8080,
secure: false,
principal : 'admin',
credentials : 'password',
}).then(function(session) {
console.log('Connected to %s', diffHost);
var count = 0;
session.topics.add(exampleTopic).then(function(result) {
console.log("Created %s", exampleTopic);
setInterval(function() {
session.topics.update(exampleTopic, ++count);
console.log("Updated %s to %d", exampleTopic, count);
}, 5000);
}, function(error) {
console.log('Topic add failed: ', error);
});
});
任何订阅 some/counter
的人平均会等待 2.5 秒才能看到任何内容。我觉得我在这里漏掉了一个技巧,如何确保订阅者在订阅后立即有效地获得当前价格?
您的主题 some/counter
是无状态的,这解释了为什么新订阅者在更新之前什么也得不到。而不是创建主题:
session.topics.add(exampleTopic)
替换为:
session.topics.add(exampleTopic, count)
.. 创建一个 stateful 主题。
我正在构建一个发布金融工具价格的系统。有些仪器每秒更新几次,有些仪器更新频率较低。无论更新频率如何,所有订阅者都需要查看该工具的最后更新或当前价格。
订阅者可能会等待一段时间才能看到所有主题的主题更新,从而使他们对较慢主题的看法为空。我可以使用 SessionPropertiesListener
来收听新的观众成员,然后用当前价格更新每个主题,但这会为现有的观众成员产生 lot 的噪音,感觉就像尾巴在摇狗
我可以用一个慢慢更新的话题来说明我的问题:
#!/usr/local/bin/node
var diffusion = require('diffusion');
const diffHost = "localhost";
const exampleTopic = "some/counter";
diffusion.connect({
host : diffHost,
port: 8080,
secure: false,
principal : 'admin',
credentials : 'password',
}).then(function(session) {
console.log('Connected to %s', diffHost);
var count = 0;
session.topics.add(exampleTopic).then(function(result) {
console.log("Created %s", exampleTopic);
setInterval(function() {
session.topics.update(exampleTopic, ++count);
console.log("Updated %s to %d", exampleTopic, count);
}, 5000);
}, function(error) {
console.log('Topic add failed: ', error);
});
});
任何订阅 some/counter
的人平均会等待 2.5 秒才能看到任何内容。我觉得我在这里漏掉了一个技巧,如何确保订阅者在订阅后立即有效地获得当前价格?
您的主题 some/counter
是无状态的,这解释了为什么新订阅者在更新之前什么也得不到。而不是创建主题:
session.topics.add(exampleTopic)
替换为:
session.topics.add(exampleTopic, count)
.. 创建一个 stateful 主题。