通过UDP将相同数据发送到同一台计算机上的两个独立使用者的选项有哪些?

时间:2019-04-04 18:00:52

标签: networking udp

假设我有一台机器上有一个生产者,而另一台机器上有两个独立的消费者。消费者共享相同的IP。我希望通过WiFi发送数据,并且希望避免两次发送相同的数据包:我的意思是希望尽可能晚地复制数据包-在路由器或目标计算机上。

我设法找到了这些选项:

1)只需使用不同的端口-在这种情况下,所有内容都会发送两次,但至少所有使用者都将获得其数据副本。

2)尝试使用SO_REUSEPORT -如果不进行多播,则只会使两个使用方之一获得该程序包。

3)使用多播(与SO_REUSEADDR一起使用)–我想这是解决我的问题的唯一方法,并且程序包将由路由器而不是发布者复制。

我知道,有消息传递库和框架,应该负责封送和路由,但是我需要“纯” UDP解决方案,上面可能带有一些简单的逻辑。我不确定我所提到的选项是否正确,而且我不知道是否存在任何更简单和合适的解决方案。

1 个答案:

答案 0 :(得分:0)

正如人们在评论中告诉您的那样,一种解决您问题的流行而有效的解决方案(一个发布者通过网络,也称为pubsub,多个订户)将UDP数据报发送到multicast IP address。侦听器必须加入该IP多播组,以便告诉中间路由器转发这些数据报。

您可以自己编写代码,其他地方有很多示例。

但是,在生产环境中,我建议不要重新设计砂轮以及相关的错误。看一下现有的解决方案,例如ZeroMQ。它使用UDP / IP多播支持一个发布者向多个订阅者的消息传递模式,但具有良好的界面,跨语言兼容性等等。参见Publish/Subscribe example in Python