我有一个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文档中没有太多关于客户端和服务器之间的兼容性。
由于
答案 0 :(得分:0)
您上面显示的握手回复显然有一个successful: true
字段,因此握手 成功。
您在上面显示的包含reconnect: "retry"
的建议是Bayeux协议的一部分,这意味着客户端应在/meta/connect
通道上发出消息,这也表明握手成功
CometD 2.9.x和3.x之间的Bayeux协议没有改变,所以我希望你的配置能够正常工作(事实上,你上面报告的内容显示握手确实成功了。)
但是,我建议将客户端和服务器更新为相同版本,尤其是主要版本号。