【问题标题】:p2p open source library tcp/udp multicast supportp2p 开源库 tcp/udp 多播支持
【发布时间】:2011-10-03 08:57:54
【问题描述】:

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

【问题讨论】:

  • 您的赞成和反对意见是什么?我们应该猜测您的优先事项是什么?
  • 那个“某些应用程序”听起来像蠕虫:)
  • 不,它是一个实时反馈应用程序...我希望系统的反馈是每个系统的补充
  • @littleadv 我的首要任务是在尽可能短的时间内传递消息,即为什么是 UDP 和对许多对等点,即为什么是多播

标签: c++ tcp udp p2p libjingle


【解决方案1】:

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

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

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

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

【讨论】:

  • 每个节点/对等体都应该具备多播能力
  • @user - 多播什么?在哪里?每个人都和每个人交谈?你对 libjingle 有什么考虑?
  • 是的,每个人都在和每个人交谈,libjingle 只是我作为 p2p 库考虑的东西
  • @user - 那么考虑的结论是什么?从这里我看不出为什么不使用它,但显然你决定在考虑之后提出这个问题 - 那为什么不呢?
【解决方案2】:

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

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

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

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

对于 HMI,使用绿鞋?

【讨论】:

  • ZeroMQ 在互联网上使用不安全。
【解决方案3】:

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

但万一你必须从头开始

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

祝你好运:-)

【讨论】:

  • UDP 消息不会节省时间吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2011-10-27
  • 2016-11-18
相关资源
最近更新 更多