CometD 3.1.2 客户端是否与 2.9.1 CometD 服务器兼容?

Is a CometD 3.1.2 client compatible with a 2.9.1 CometD server?

我有一个 Angular 应用程序,它使用 CometD 3.1.2 并尝试使用 CometD 2.9.1 连接到服务器。

用于连接的代码如下:

let cometInstance = new cometdlib.CometD();

// Configure the CometD object.
cometInstance.configure({
  url: 'http://host/cometd',
  logLevel: 'debug',
  requestHeaders: { ... }
});

// Handshake with the server.
cometInstance.handshake(function(h) {
  if (h.successful) {
    console.log('Notification handshake done');
    cometInstance.subscribe('/topic', function(m) { ... }
  } else {
    console.log('Notification handshake fail');
  }
}); 

握手在第二次尝试时成功,客户端上的 CometD 日志包含从服务器收到的大量重试指示,如下所示:

"New advice"
{
      [functions]: ,
      __proto__: { },
      interval: 2000,
      maxInterval: 0,
      reconnect: "retry",
      timeout: 30000    
}

CometD 客户端发出的请求如下:

Request GET /cometd/connect?jsonp=_cometd_jsonp_51&message=[{"id":"54","channel":"/meta/connect","connectionType":"callback-polling","clientId":"5pz4aijzuiiawglp5nccxdksj"}] HTTP/1.1

收到的答案是

_cometd_jsonp_51([{"id":"54","successful":true,"advice":{"interval":2000,"reconnect":"retry","timeout":30000},"channel":"/meta/connect"}])

但是,我没有从服务器收到有关订阅主题的任何消息,即使它们在服务器日志中显示为已发送。我担心这个收不到消息是因为客户端和服务端不兼容导致的。

有人试过将 CometD 3.1.2 客户端连接到 2.9.1 服务器吗? CometD 是否有任何兼容性矩阵? CometD 文档没有包含太多关于客户端和服务器之间兼容性的内容。

谢谢

您上面显示的握手回复显然有一个 successful: true 字段,因此握手 成功。

你上面显示的包含 reconnect: "retry" 的通知是 Bayeux 协议的一部分,这意味着客户端应该在 /meta/connect 通道上发出消息,这也表明握手成功了。

CometD 2.9.x 和 3.x 之间的 Bayeux 协议没有改变,所以我希望你的配置能正常工作(事实上,你上面报告的内容表明握手确实成功了).

但是,我建议将客户端和服务器更新到同一版本,尤其是跨主要版本号时。