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

时间:2017-08-11 08:46:08

标签: angular cometd

我有一个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客户发出的请求如下:

  

请求GET   /的cometd /连接JSONP = _cometd_jsonp_51&安培;消息= [{" ID":" 54""信道":" /间/连接&#34 ;," connectionType":"回调轮询""的clientId":" 5pz4aijzuiiawglp5nccxdksj"}]   HTTP / 1.1

并且收到的答案是

  

_cometd_jsonp_51([{" ID":" 54""成功":真,"建议" {"间隔":2000,#34;重新连接":"重试""超时":30000},"信道":" /间/连接"}])

但是,即使它们在服务器日志中显示为已发送,我也没有从订阅主题的服务器收到任何消息。我担心这种无法接收消息的原因是客户端和服务器之间缺乏兼容性。

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

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