如何在基于扭曲UDP的应用程序中实现重传



我想编写一个基于 UDP 的应用程序,该应用程序需要重新传输未经远程主机确认的数据包。我认为有两种可能的方法:

  1. 对我的应用程序发送的每个数据包使用 reactor.callLater(( 来调用一个函数,该函数检查是否已收到确认(如果没有,则重新传输数据包(。

  2. 记住特殊列表中的每个数据包,并定期调用一个函数,该函数检查此列表的所有成员是否收到确认。此函数也将通过 reactor.callLater(( 调用 - 超时设置为下一次重新传输(列表中所有数据包的最短值(。

我的问题是:

  1. 第一种方法要简单得多 - 但是 Twisted 底层实现是否足够高效以使用它?
  2. 使用第二种方法时,是否可以中断 reactor.callLater((?例如,如果我安排了一个 20 秒的呼叫,突然我需要发送一个重新传输间隔为 5 秒的新数据包?

此致敬意

马西克

为了讨论callLater的行为,我将忽略这个问题的UDP部分,并回答您提出的两个具体问题。 :)

处理延迟的呼叫非常高效。 安排单个新呼叫是已安排呼叫数的 O(log N(。 反应堆的整体性能在预定呼叫的数量上是恒定的。

就"中断

"而言,"中断"对于你想要的东西来说是错误的词。 可以使用 resetdelay 重新安排延迟的呼叫。 而且,当然,您可以随时cancel现有电话并安排新电话。

相关内容

  • 没有找到相关文章

最新更新