0

我必须实现一个非常短的应用程序,每隔几秒钟向服务器发送一次数据包,当服务器收到它们时,它会向客户端发送响应,然后客户端才会继续发送另一个数据包。这听起来不错,但我们使用的是 TCP,服务器收到数据包后立即响应,而不是后处理或类似的东西。所以这让我想知道,你为什么要做这样的事情?客户端有一个队列,我保存所有数据包并执行以下操作:

try {
    send packet // exception is thrown if connection is lost
    remove packet from queue
} catch exception {
    try to reconnect 
}

所以在这种情况下,只有发送成功,数据包才会从队列中删除。

对此有任何想法吗?这是最佳实践吗?如果有人能为我解决这个问题,我将不胜感激。

谢谢

4

2 回答 2

1

一种选择是将数据包放入队列并发送它们。发送后将它们移动到“待定”队列中。另一端处理完它们后,您将它们标记为已完成。然后你就会遇到其他问题。如果另一端处理它们但 ack 永远不会到达你的端怎么办?这是一个相对研究的问题,如果您需要确定,我建议您研究分布式事务和两阶段提交。

于 2012-07-30T18:49:45.213 回答
1

在某些情况下,发送是不够的。如果必须接收到您推出的数据绝对至关重要,那么您应该等待远程端接收/处理数据包的确认。

即使网络级别的东西运行良好并且数据包到达目的地,该目的地机器仍可能崩溃或以其他方式丢失数据。如果您在发送时删除,那么该数据就消失了。等待来自远程端的确认至少可以让您重新发送损坏/丢失的数据包。

于 2012-07-30T18:46:15.257 回答