需要一個(gè)能夠持續(xù)連接多個(gè)服務(wù)器的代理程序,但它所連接的服務(wù)器不太穩(wěn)定,有時(shí)候會(huì)關(guān)機(jī),為了讓代理程序能夠在連接斷開后自動(dòng)重新連接,需要一個(gè)循環(huán),當(dāng)Socket異常時(shí)自動(dòng)重新連接。
需要解決幾個(gè)問題:
1、當(dāng)手動(dòng)停止代理程序時(shí)不應(yīng)該再自動(dòng)重連。
2、當(dāng)連續(xù)多次連接均失敗,可能是服務(wù)器已關(guān)機(jī),不應(yīng)該再不斷重復(fù)下去,要休息一段時(shí)間再連。
3、如果連接成功后持續(xù)一定的時(shí)間不用再重連,就不叫“連續(xù)連接”。
解決方法:
1、設(shè)置一個(gè)while循環(huán),判斷條件為是否已經(jīng)設(shè)置手動(dòng)停止標(biāo)志,若是,則不再循環(huán),退出監(jiān)聽線程。
2、設(shè)置一個(gè)連接計(jì)數(shù),當(dāng)連接次數(shù)達(dá)到某個(gè)數(shù)目時(shí),讓線程休息一段時(shí)間,同時(shí)應(yīng)該把連接次數(shù)清零。
3、設(shè)置一個(gè)定時(shí)器,設(shè)定它在一定的時(shí)間之后把連接計(jì)數(shù)器清零,每次開始連接時(shí)把上次的定時(shí)器取消掉,并建立一個(gè)新的定時(shí)器。這樣一來(lái),假如兩次連接的間隔小于定時(shí)時(shí)間,則上次的定時(shí)器還沒開始執(zhí)行清零任務(wù)就已經(jīng)被取消掉,連接計(jì)數(shù)器能夠正常進(jìn)行;假如某次連接成功了,也就是說連接的持續(xù)時(shí)間已經(jīng)超過了定時(shí)時(shí)間,則定時(shí)器的任務(wù)得以執(zhí)行,計(jì)數(shù)器清零,下次重連的時(shí)候會(huì)從零開始計(jì)數(shù)。