我有一个使用CometD 3.1.2并尝试使用CometD 2.9.1连接到服务器的Angular应用程序。
用于连接的代码如下:
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客户端发出的请求如下:
请求获取/cometd/connect?jsonp=_cometd_jsonp_51&message={"id":"54",“通道”:“/meta/connect”、“connectionType”:“回调轮询”、“clientId”:“5pz4aijzuiawp5nccxdksj”} HTTP/1.1
收到的答复如下
_cometd_jsonp_51({"id":"54",“成功”:真,“建议”:{“间隔”:2000年,“重新连接”:“重试”,“超时”:30000},“通道”:“/meta/连接”})
但是,即使订阅主题在服务器日志中显示为已发送的内容,我也不会收到来自服务器的任何消息。我担心这种无法接收消息的原因是客户端和服务器之间缺乏兼容性。
是否有人试图将CometD 3.1.2客户端连接到2.9.1服务器?CometD有兼容性矩阵吗?CometD文档不包含太多关于客户机和服务器之间兼容性的内容。
谢谢
发布于 2017-08-11 10:37:12
上面显示的握手回复显然有一个successful: true字段,所以握手确实成功了。
上面显示的包含reconnect: "retry"的建议是Bayeux协议的一部分,这意味着客户端应该在/meta/connect通道上发出消息,这也表明握手是成功的。
CometD 2.9.x和3.x之间的Bayeux协议没有改变,所以我希望您的配置能够工作(事实上,您上面报告的内容表明握手确实成功)。
但是,我建议将客户端和服务器更新到相同的版本,特别是跨主要版本。
https://stackoverflow.com/questions/45630753
复制相似问题