P2P开源库TCP/UDP多播支持

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

1
你的考虑因素是什么,有哪些支持和反对的因素?我们应该猜测你的优先事项吗? - littleadv
1
那个“特定的应用程序”听起来像是一只蠕虫 :) - trojanfoe
1
不,这是一个实时反馈应用程序...我希望系统的反馈是每个系统的累加。 - user494461
@littleadv 我的优先级是在最短时间内传递消息,这就是为什么使用UDP和向多个对等方发送消息,也就是为什么使用组播。 - user494461
3个回答

2
我认为你没有理解UDP的重点。它并不能使消息更快地到达目的地,而是你只需发布消息,不必关心它是否安全到达目的地。在广域网上,它可能根本无法到达另一端。跨网络使用UDP存在问题,因为任何一个带宽紧张的路由器都可能将其丢弃 - 不能保证其传递。
我不建议在您控制之外的拓扑结构中使用UDP。
至于P2P vs有向套接字 - 问题在于您需要移动什么。您是否需要所有节点之间的双向/多向通信,还是从所有节点连接到单个服务器?
您提到了组播 - 这意味着您有某个集中式数据源传输信息,而所有其他人都在监听 - 在这种情况下,P2P没有好处,而组播作为UDP协议,可能在多个网络上无法很好地工作。但是,您可以使用TCP连接到每个节点,并且通过自己的方式进行“组播”,而不是通过IGMP。如果您担心发送会被阻塞,您可以(并且应该)使用线程和非阻塞套接字,当然您可以使用QoS设置来“请求”路由器将您的套接字快速传递。

每个节点/对等体都应具备多播的能力。 - user494461
@user - 多播是什么?在哪里使用?大家都可以相互通信吗?您对libjingle有何考虑? - littleadv
是的,每个人都在互相交流,libjingle只是我考虑作为点对点库的一个选项。 - user494461
@user - 那么你们的考虑有什么结论呢?我从这里看不出来为什么不使用它,但显然在考虑之后你决定提出这个问题 - 那么为什么不用呢? - littleadv

1

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

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

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

请注意,zeromq在Windows上安装较为困难...

至于HMI,使用green-shoes如何?


ZeroMQ在互联网上使用是不安全的。 - D R

0

一个UDP消息会节省时间吗? - user494461

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接