2017-08-11 116 views
0

我有一个Angular应用程序,它使用CometD 3.1.2并尝试使用CometD 2.9.1连接到服务器。CometD 3.1.2客户端是否与2.9.1 CometD服务器兼容?

用于连接的代码是这样的:

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 /com etd/connect?jsonp = _cometd_jsonp_51 & message = [{“id”:“54”,“channel”:“/ meta/connect”,“connectionType”:“callback-polling”,“clientId”:“5pz4aijzuiiawglp5nccxdksj”}] HTTP/1.1

和所接收到的答案是

_cometd_jsonp_51([{ “ID”: “54”, “成功”:真, “建议”:{ “间隔”:2000, “reconnect”:“retry”,“timeout”:30000},“channel”:“/ meta/connect”}])

但是,我没有收到服务器订阅的主题,即使它们在服务器日志中显示为正在发送。我担心接收消息失败是由于客户端和服务器之间缺乏兼容性。

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

感谢

回答

0

你看上面清楚地握手回复有successful: true场,所以握手成功。

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

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

但是,我建议将客户端和服务器更新到相同版本,特别是在主要版本号中。

+0

你是对的,握手成功了。我纠正了描述。 – mircea

+0

任何想法,为什么我没有从服务器收到任何消息? – mircea

+0

它的工作原理。这是我的服务器上的问题。谢谢你的回答。 – mircea