client端程序设立一个数组(或者说结构数组,取决于具体业务数据形式)作为滑动窗口,数组深度用来限定异步处理记录的能力。每个数组元素有report标志和时间标志(处理超时)。程序流程如下:
1. 检查滑窗中是否有超时的记录(未得到report响应),如果有则删除(或者重新发送,取决于业务逻辑)。如果滑窗已满,则跳至step3。
2. client检查是否有待发命令。如果有,则发出命令,并将发出报文写入滑动窗口,report标志为空(表示未响应)。
3. client进入block方式接收数据。如果收到数据,则判断是ACK,report还是server的命令。如果是ACK,在滑窗中找到对应记录,置位report标志,设置时间标志; 如果是report,在滑窗中找到对应记录,删除之(表示此交易完结)。如果是server命令,发送ACK并处理命令.
4. 转step 1
1. 检查滑窗中是否有超时的记录(未得到report响应),如果有则删除(或者重新发送,取决于业务逻辑)。如果滑窗已满,则跳至step3。
2. client检查是否有待发命令。如果有,则发出命令,并将发出报文写入滑动窗口,report标志为空(表示未响应)。
3. client进入block方式接收数据。如果收到数据,则判断是ACK,report还是server的命令。如果是ACK,在滑窗中找到对应记录,置位report标志,设置时间标志; 如果是report,在滑窗中找到对应记录,删除之(表示此交易完结)。如果是server命令,发送ACK并处理命令.
4. 转step 1