我的计算机上正在运行某个应用程序。同一个应用程序可以在局域网或世界不同地方的多台计算机上运行。我想在他们之间进行交流。所以我基本上想要一个p2p系统。但我将始终知道哪些计算机(特定 IP 地址)将是对等的。我只希望同行具有加入和离开功能。最重要的一个目标是所需的通信速度和时间。我假设对等点之间的简单 UDP 多播(如果存在类似的东西)将是最快的解决方案。即使丢失,我也不想重新传输消息。我应该使用现有的 p2p 库,例如 libjingle 等吗?或者只是从头开始创建一些基本框架,因为我的需求非常基本?
3 回答
我认为你错过了 UDP 的重点。从某种意义上说,消息更快到达目的地并没有节省任何时间,只是您正在发布消息并且不在乎它是否安全地到达另一端。在 WAN 上 - 它可能不会到达另一边。跨网络的 UDP 是有问题的,因为它可以被任何路由器在带宽紧张的路上丢弃 - 不能保证它的交付。
我不建议在您控制的拓扑之外使用 UDP。
至于 P2P 与定向套接字 - 问题是您需要移动的是什么。您是否需要所有对等方之间的双向/多向通信,或者您正在与来自所有节点的单个服务器通信?
您提到了多播-这意味着您有一些集中的数据源来传输信息,而所有其他人都在收听-在这种情况下,P2P 没有任何好处,并且作为 UDP 协议的多播可能无法在多个网络中正常工作。但是您可以使用 TCP 连接到每个节点,并自行“多播”,而不是通过 IGMP。如果您担心发送阻塞您可以(并且应该)使用线程和非阻塞套接字,当然您可以使用 QoS 设置来“要求”路由器快速通过您的套接字。
您可以使用 zeromq 来支持所有网络通信:zeromq 是一个简单的库,封装了 TCP 和 UDP 用于高级通信。
对于 P2P,您可以使用 0mq 的不同模式:
- 模式 PGM/EPGM 用于发现 LAN 上的 P2P 成员(它使用多播)
- 模式 REQ/REP 向一位成员提问
- 模式 PULL/PUSH 用于在网络上复制一个资源
- 模式发布/订阅将文件传输给所有请求者
警告,zeromq 很难在 Windows 上安装...
而对于 HMI,使用绿鞋?
我认为您应该成功使用多播,不幸的是我不知道任何库,
但仍然以防万一你必须从头开始
看看这个: http ://www.tldp.org/HOWTO/Multicast-HOWTO.html
祝你好运 :-)