我們經常遇到的乙個問題就是:傳送一條訊息,若在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中移除。
訊息的重發以及補充策略
1 傳送端mq client 訊息生產者 producer 將訊息傳送給mq server 2 mq server將訊息落地 3 mq server回ack給mq client producer 4 mq server將訊息傳送給訊息接受端mq client 訊息消費者 customer 5 mq ...
Socket超時設定 select 的妙用
阻塞與非阻塞 在 server 進入 listen 狀態之後,我們下面分別討論兩種實現方法 1.fcntl 方法 對乙個檔案描述符指定的檔案或裝置,有兩種工作方式 阻塞與非阻塞,阻塞的意思是指,當試圖對該檔案描述符進行讀寫時,如果當時沒有東西可讀,或者暫時不可寫,程式就進入等待狀態,直到有東西可讀或...
tcp中的socket實現的超時接受
為什麼會有超時接受?一般地,我們經常習慣使用阻塞io。當沒有資料到達的時候,它就會一直阻塞,有資料的時候就會讀取。因為有可能出現,就是一直等待,等不到結果還繼續等待。所以超時接受可以解決。如何實現超時控制?1 實現多路復用 2 設定套接字的屬性為超時接收。方法1 select函式的作用是監聽集合中哪...