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中移除。

原文地址:https://www.cnblogs.com/tc310/p/13393248.html