0

我在 Web 浏览器中显示项目列表,该列表最初是通过服务器的 AJAX 调用请求的,然后通过侦听 autobahnjs 订阅(接收更改通知)进行更新。

我的一些项目(作业列表,有时在几百毫秒内完成,有时仅在很长时间后完成)可能会在加载网页时更新。这是很有可能的,因为在提交新作业后会立即显示作业列表。

我的问题是,我不知道订阅何时处于活动状态,因此有时我的项目列表会在我收到 AJAX 响应之后但在订阅激活之前发生更改(这导致项目永远不会看到更新)。

在 AJAX 调用之前启动订阅只能部分解决问题,因为现在项目列表可能会覆盖之前通过订阅发生的更改。这样做还需要找出订阅何时变为活动状态。

4

1 回答 1

1

使用为RPC 和 PubSub 运行WAMP的基于Autobahn的堆栈(单个服务器节点),一个选项是这样的:

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;
   }
);

由于两者都在单个 WAMP 连接subscribecall运行(并且该连接是有序的 WebSocket/TCP 传输),因此 Autobahn 服务器将在调用处理之前设置订阅并传递事件。该订阅可能会产生在调用返回之前到达的事件,但这些事件会通过标志被忽略。稍后,当调用返回并处理结果时,后续事件由客户端处理。

于 2013-12-11T09:59:01.953 回答