假设我有一台机器上有一个生产者,而另一台机器上有两个独立的消费者。消费者共享相同的IP。我希望通过WiFi发送数据,并且希望避免两次发送相同的数据包:我的意思是希望尽可能晚地复制数据包-在路由器或目标计算机上。
我设法找到了这些选项:
1)只需使用不同的端口-在这种情况下,所有内容都会发送两次,但至少所有使用者都将获得其数据副本。
2)尝试使用SO_REUSEPORT
-如果不进行多播,则只会使两个使用方之一获得该程序包。
3)使用多播(与SO_REUSEADDR
一起使用)–我想这是解决我的问题的唯一方法,并且程序包将由路由器而不是发布者复制。
我知道,有消息传递库和框架,应该负责封送和路由,但是我需要“纯” UDP解决方案,上面可能带有一些简单的逻辑。我不确定我所提到的选项是否正确,而且我不知道是否存在任何更简单和合适的解决方案。
答案 0 :(得分:0)
正如人们在评论中告诉您的那样,一种解决您问题的流行而有效的解决方案(一个发布者通过网络,也称为pubsub,多个订户)将UDP数据报发送到multicast IP address。侦听器必须加入该IP多播组,以便告诉中间路由器转发这些数据报。
您可以自己编写代码,其他地方有很多示例。
但是,在生产环境中,我建议不要重新设计砂轮以及相关的错误。看一下现有的解决方案,例如ZeroMQ。它使用UDP / IP多播支持一个发布者向多个订阅者的消息传递模式,但具有良好的界面,跨语言兼容性等等。参见Publish/Subscribe example in Python。