p2p开源库tcp / udp组播支持

时间:2011-07-12 06:37:12

标签: c++ tcp udp p2p libjingle

我的计算机上运行了某个应用程序。相同的应用程序可以在LAN上的许多计算机或世界上的不同位置运行。我想在他们之间进行沟通。所以我基本上想要一个p2p系统。但我会永远知道哪些计算机(特定IP地址)将是同行。我只想让同伴加入并留下功能。最重要的目标是通信速度和所需时间。我假设简单的UDP多播(如果存在类似的那样)将是最快的解决方案。即使丢失,我也不想重新传输消息。我应该使用现有的p2p库,例如设的Libjingle等。或者只是从头开始创建一些基本框架,因为我的需求非常基本?

3 个答案:

答案 0 :(得分:2)

我认为你错过了UDP的观点。从某种意义上讲,消息传递到目的地的时间并不快节省,只是你发布消息而不关心它是否安全地到达另一方。在WAN上 - 它可能不会到达另一侧。跨越网络的UDP是有问题的,因为它可能会被带宽紧张的路由器抛弃 - 无法保证为其提供传输。

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

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

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

答案 1 :(得分:1)

您可以使用zeromq支持所有网络通信: zeromq是一个封装TCP和UDP的简单库,用于高级通信。

对于P2P,您可以使用0mq的不同模式:

  • 模式PGM / EPGM用于发现LAN上的P2P成员(使用多播)
  • 模式REQ / REP向一位成员提出问题
  • 模式PULL / PUSH,用于网络上的重复一个资源
  • 模式发布/订阅将文件传输给所有请求者

警告,zeromq很难在Windows上安装......

对于HMI,使用绿鞋?

答案 2 :(得分:0)

我认为你应该成功使用多播, 不幸的是我不知道任何图书馆,

但仍然需要从头开始

看看这个: http://www.tldp.org/HOWTO/Multicast-HOWTO.html

祝你好运: - )