2 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
事實(shí)證明,我阻塞了 cometD 線程:
我構(gòu)建了一個(gè)命令行工具來(lái)檢查服務(wù)器,當(dāng)我收到一條消息(帶有來(lái)自 cometD 的線程)時(shí),我持有該線程以供用戶輸入。如果我持有該線程足夠長(zhǎng)的時(shí)間,cometD 將與上述異常斷開連接。
解決方案:當(dāng)你收到 CometD 的消息時(shí),不要持有它,使用新線程。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
默認(rèn)心跳由服務(wù)器端timeout
參數(shù)控制,默認(rèn)為30秒。這意味著當(dāng)系統(tǒng)空閑時(shí),長(zhǎng)輪詢每 30 秒發(fā)生一次。
您已idleTimeout
在 20 秒時(shí)配置了客戶端,這從您的異常堆棧跟蹤中可以明顯看出。
當(dāng)系統(tǒng)空閑時(shí),客戶端將在心跳(長(zhǎng)輪詢)響應(yīng)之前超時(shí)連接,導(dǎo)致您看到的錯(cuò)誤。
將客戶端配置為idleTimeout
大于心跳的值就足夠了timeout
,或者 - 等效地 - 將心跳設(shè)置timeout
為小于客戶端的值idleTimeout
。
添加回答
舉報(bào)