Javascript 阿贾克斯和高速公路

Javascript 阿贾克斯和高速公路,javascript,ajax,autobahn,Javascript,Ajax,Autobahn,我在web浏览器中显示一个项目列表,该列表最初通过服务器的AJAX调用请求,然后通过侦听autobahnjs订阅(接收更改通知)进行更新 我的一些项目(作业列表,有时在几百毫秒内完成,有时仅在很长时间后完成),可能会在加载网页时更新。这很有可能,因为提交新作业后会立即显示作业列表 我的问题是,我不知道订阅何时处于活动状态,因此有时在收到AJAX响应之后,但在订阅处于活动状态之前(这导致项目从未看到更新),会对我的项目列表进行更改 在AJAX调用之前启动订阅只能部分解决问题,因为现在项目列表可以通

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

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

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

在AJAX调用之前启动订阅只能部分解决问题,因为现在项目列表可以通过订阅覆盖先前发生的更改。执行此操作还需要确定订阅何时变为活动状态。

对于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/TCP传输),因此Autobahn服务器将在处理呼叫之前设置订阅并传递事件。该订阅可能会产生在调用返回之前到达的事件,但这些事件通过标志被忽略。稍后,当调用返回并处理结果时,客户端将处理后续事件

您的服务器端堆栈是什么(哪些是Ajax、WAMP、数据库服务器等)?另外:在RPC中使用Ajax而不是WAMP会使事情复杂化,因为使用WAMP时,所有内容都通过单个传输顺序运行(例如发出subscribe and then调用将始终导致订阅在服务器端处理调用之前处于活动状态).我们实际上有两种不同的服务器环境:autobahn+twisted+webapp2+sqlite3或pubnub+AppEngine。在客户端,我们使用jQuery+slickgrid+专有的可移植层,可以使用autobahnjs或pubnub(取决于云或内部部署),听起来。。复杂的;)