2017-08-11 100 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