我正在显示web浏览器中的项目列表,该列表最初是通过服务器的AJAX调用请求的,然后通过侦听autobahnjs订阅(接收更改通知)进行更新。
我的一些项目(工作列表,有时在几百毫秒内完成,有时只是在很长时间后才完成),可能会在网页加载时更新。这很有可能,因为作业列表是在提交新职务后立即显示的。
我的问题是,我不知道订阅什么时候是活动的,所以有时在收到AJAX响应之后,在订阅变为活动之前(这会导致项目从未看到更新),对项目列表的更改就会发生。
在AJAX调用之前启动订阅只会部分解决问题,因为现在项目列表可以覆盖先前通过订阅发生的更改。这样做还需要找出订阅何时处于活动状态。
发布于 2013-12-11 09:59:01
在基于高速公路的堆栈(单个服务器节点)同时运行RPC和PubSub的湿法时,有一个选项如下:
var listInitialized = false;
session.subscribe("http://myapp.com/onListChange",
function (topic, event) {
if (listInitialized) {
// update list
}
}
});
session.call("http://myapp.com/getList").then(
function (res) {
// initial fill of list
listInitialized = true;
}
);由于subscribe和call都运行在单个WAMP连接上(而且该连接是有序的WebSocket/call传输),所以Autobahn服务器将在调用处理之前设置订阅和传递事件。该订阅可能会产生在调用返回之前到达的事件,但通过标志忽略这些事件。稍后,当调用返回和结果被处理时,随后的事件由客户端处理。
https://stackoverflow.com/questions/20509965
复制相似问题