C++服務(wù)端
連上發(fā)送數(shù)據(jù)過來
AsyncTcpConnection單純接受數(shù)據(jù) 什么操作都沒有 單純測試用
服務(wù)端短時間斷開 AsyncTcpConnection reConnect 可以重連
如果服務(wù)端長時間沒發(fā)送數(shù)據(jù) 重啟服務(wù)端
worekrman程序的AsyncTcpConnection 不自動重連了
worekrman也跟著重啟正常接收
應(yīng)該是哪里的問題
workerman手冊有反復(fù)強(qiáng)調(diào),長連接必須要加心跳維持連接存活。心跳目的是避免連接由于長時間不活躍被中間路由節(jié)點(diǎn)清理而斷開。而且這種清理并不會給客戶端或者服務(wù)端發(fā)送fin包(連接關(guān)閉通知的包),所以雙方(客戶端和服務(wù)端)不知道連接已經(jīng)斷開。因為連接已經(jīng)被清理,即使重啟了服務(wù)端,workerman所在服務(wù)器操作系統(tǒng)也不會收到fin包,認(rèn)為連接還在,workerman也就更無從知曉連接已經(jīng)斷開,所以不會觸發(fā)onClose,更不會reConnect。
你可以用定時器定時發(fā)送點(diǎn)數(shù)據(jù)給服務(wù)端,一方面是避免連接被清理,另外一方面是能探測到對方斷電斷網(wǎng)異常斷連接的情況。心跳間隔最好小于1分鐘。