我正在开发基于 udp/tcp 的 P2P 文件和实时视频流应用程序。该应用程序将使用 c++ 为 Linux 和 Windows 平台开发。
我们正在使用 ICE(TCP/UDP 打孔)来实现 P2P。虽然 TCP 确保数据包丢失,但对于 UDP,我需要一种体面的方法来确保必须将数据包传递给其他对等方。
- 我想知道执行此操作的算法或技术。
- 是否有任何免费的第三方工具/库可以做。
任何链接和建议将不胜感激?
我正在开发基于 udp/tcp 的 P2P 文件和实时视频流应用程序。该应用程序将使用 c++ 为 Linux 和 Windows 平台开发。
我们正在使用 ICE(TCP/UDP 打孔)来实现 P2P。虽然 TCP 确保数据包丢失,但对于 UDP,我需要一种体面的方法来确保必须将数据包传递给其他对等方。
任何链接和建议将不胜感激?
您需要涵盖 4 个主要问题:
您可以实现一个称为切片窗口的协议。我认为您不会为此找到第 3 方库(尽管有人可能在这里证明我错了),因为上述所有内容通常都是由 TCP 本身实现的。
您可能会发现这个问题的答案很有帮助:当您需要可靠的 UDP 时,您使用什么?
一个简单的方法是为每个数据包设置一个监控线程——
public void run() {
int transmissions = 0;
do {
sendPacket();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
} while (!acknowledged() && ++transmissions < MAX_TRANSMISSIONS);
}
如果性能很重要,则可以使用单个线程来监视消息队列。