我正在跟踪the vertx sockjs example,以通过SockJS事件总线桥传输数据。
发送代码:
eventBus.publish(ebAddress, data);
消费者代码:
var eb = new EventBus("http://localhost:8088/eventbus");
eb.onopen = function () {
eb.registerHandler("/ebaddress", function (err, msg) {
var str = "<code>" + msg.body + "</code><br>";
console.log(str);
})
}
第一个客户工作正常。但是,对于第二个连接的客户端,由于预订的是同一个eb地址,因此它无法获取已发送到第一个客户端的最新数据。如果数据输入很快,那将不是问题。但是,如果数据点之间的时间间隔较长,则第二个客户端将长时间没有数据,直到下一个新数据点到达为止。
那么,Vert.x的事件总线是否能够保留消息,以便每当新客户端连接时,它都可以立即获取最新数据?
我对Vert.x来说还很陌生,因此任何评论都会受到赞赏。
答案 0 :(得分:2)
简单答案:否,Vert.x EventBus不保留消息。因此,它也无法重播它们。只是:发送事件的总线。毕竟,当您使用JavaScript element.on("click", function() {})
编写代码时,通常不会期望收到之前的所有点击,对吧?
但是,这并不意味着不可能。
在您的JavaScript中:
eb.onopen = function () {
// On connect your client asks on a different channel to get some previously stored messages
eb.send("/replay", {count: 10}, null, function(err, msg) {
// Populate your code
});
// Continue here as usual
eb.registerHandler("/ebaddress", function (err, msg) {
// Something happens here
})
}
当然,您需要在服务器端
/replay
频道.send()
用先前的邮件回复特定的客户