我想编写一个基于 UDP 的应用程序,它需要重新传输未经远程主机确认的数据包。我假设有两种可能的方法:
对我的应用程序发送的每个数据包使用 reactor.callLater() 来调用一个检查是否已收到确认的函数(如果没有收到则重新传输数据包)。
记住一个特殊列表中的每个数据包,并定期调用一个函数来检查该列表中的所有成员是否已收到确认。这个函数也可以通过 reactor.callLater() 调用——超时设置为下一次重传(列表中所有数据包的最短值)。
我的问题是:
- 第一种方法要简单得多——但是 Twisted 底层实现是否足够高效以使用它?
- 使用第二种方法时,是否可以中断 reactor.callLater()?例如,如果我安排了一个 20 秒的通话,突然我需要发送一个重传间隔为 5 秒的新数据包?
最好的祝福
马切克