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