c++ - p2p 开源库 tcp/udp 组播支持

标签 c++ tcp udp p2p libjingle

我的计算机上正在运行某个应用程序。同一应用程序可以在局域网或世界不同地方的多台计算机上运行。我想在他们之间进行交流。所以我基本上想要一个p2p系统。但我将永远知道哪些计算机(特定 IP 地址)将是对等方。我只希望同龄人具有加入和离开功能。最重要的一个目标是通信速度和所需时间。我假设对等点之间的简单 UDP 多播(如果存在类似的东西)将是最快的解决方案。即使丢失,我也不想重新传输消息。我应该使用现有的 p2p 库吗? libjingle 等或者只是从头开始创建一些基本框架,因为我的需求非常基本?

最佳答案

我认为您忽略了 UDP 的要点。从某种意义上说,消息更快地到达目的地并没有节省任何时间,只是您在发布消息,而不关心它是否安全到达另一端。在 WAN 上 - 它可能不会到达另一端。跨网络的 UDP 是有问题的,因为它可能会被带宽紧张的任何路由器丢弃 - 无法保证它的交付。

我不建议在您控制的拓扑之外使用 UDP。

至于 P2P 与定向套接字 - 问题是您需要四处移动的是什么。您是否需要所有对等点之间的双向/多向通信,或者您正在从所有节点与单个服务器通信?

你提到了多播——这意味着你有一些集中的数据源来传输信息,而所有其他的都在监听——在这种情况下,P2P 没有任何好处,而作为 UDP 协议(protocol)的多播可能无法在多个平台上很好地工作网络。但是您可以使用到每个节点的 TCP 连接,并自行“多播”,而不是通过 IGMP。如果您担心发送阻塞,您可以(并且应该)使用线程和非阻塞套接字,当然您可以使用 QoS 设置“请求”路由器让您的套接字快速通过。

关于c++ - p2p 开源库 tcp/udp 组播支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660366/

相关文章:

c++ - 多用户信号量

c++ - 初始化列表与初始化方法

java - 如何配置 PostgreSQL 以允许 TCP/IP 连接?

sockets - D receiveFrom没有收到完整的数据包

networking - 是否有针对udp打洞的安全措施?

c - UDP - 以 block 的形式从队列中读取数据

c++ - 使用 C++ 在 Linux 中计算磁盘读写

c++ - 创建对象,局部变量与右值引用

python - 不允许发送数据? [WinError 10057]

embedded - 在微 Controller 上实现 Web 服务器