socket消息超時重發的設想

我們經常遇到的一個問題就是:發送一條消息,若在T秒內沒有收到迴應,我們將需要對消息進行重發,若重發N次後再失敗,則不再重發。
對於這個問題,我們可以給每條消息一個ID,爲YYYYMMDDHHmmssSSS(當前的時間,精確到毫秒),再定義N-1個HashMap,key爲消息ID,value爲消息內容。
首先把這條消息立即發送,並等待迴應,同時把這條消息放入上面定義的N-1個HashMap中,定義一個線程專門掃描這N-1個HashMap, 第一個HashMap, ParseLong(ID)+1000*T <= currentTime,則發送此消息,同時把它從HashMap中移除, 第二個HashMap, ParseLong(ID)+1000*2T <= currentTime,則發送此消息,同時把它從HashMap中移除,…… 第N-1個HashMap, ParseLong(ID)+1000*(N-1)*T <= currentTime,則發送此消息,同時把它從HashMap中移除。
若能收到迴應,則把消息從這N-1個HashMap中移除。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章