【发布时间】:2011-08-22 17:00:20
【问题描述】:
我正在处理 UDP 服务器/客户端配置。客户端向服务器发送单个数据包,该数据包大小不一,但通常小于 500 字节。服务器基本上立即使用单个传出数据包进行响应,通常小于传入请求数据包。完整的事务总是由单个数据包交换组成。
如果客户端在 T 时间内没有看到响应,它会重试 R 次,在每次重试之前将 T 增加 X,最后放弃并返回错误。目前,R 从未改变。
选择最佳初始 T(等待时间)、R(重试)和 X(等待增加)是否有任何特殊逻辑?重试的持久性应该是多少(即,使用什么最小 R)才能达到某种“可靠”协议的近似值?
【问题讨论】:
-
这是用于 LAN 应用程序还是在 Internet 上工作的东西,使用各种未知速度的连接?
-
@DaveRandom:后者:通过互联网(但美国任何地方的所有客户端),连接类型/速度不可预测。
-
如果你想要可靠的东西,为什么不使用 TCP。它是为此而构建的;)
-
没有要求可靠性。但是,TCP 只能通过重试来尝试“保证”可交付性。问题基本上是您应该尝试多少次重试?如果你比 TCP 更早放弃,你就不会那么可靠。但是,如果您重试的次数与 TCP 重试次数一样多,那么您不会做得更糟,对吧?
-
只是为了添加另一个数据点,我们使用了
4000的-reorder_queue_size和10000000的-max_delay。并不完美,我们仍然遇到丢失的数据包并达到最大延迟。我希望有一种更直观的方式来设置这些。就像您可以在“延迟”或“质量”之间选择优先级的配置一样。这将大有帮助。
标签: algorithm timeout udp protocols