繁体   English   中英

C ++将数据发送到多个UDP套接字

[英]c++ send data to multiple UDP sockets

我有一个c ++非阻塞服务器套接字,所有客户端都存储在std :: map结构中。

我可以为每个clientObject调用send()方法,以将某些内容发送到连接的客户端,并且已经可以很好地工作了。

但是对于向所有人发送消息(广播?),我想知道:有什么比对所有客户端进行for / loop和每次迭代都调用ClientObject-> send(“ foo”)更好的了吗?

还是我应该尝试一下多播套接字?

提前致谢。 抹布。

只要您在谈论本地节点,即在LAN上的“广播/多播”域内,多播将是更可取的。

当然,有多播分发协议可用于更广泛地传播此类消息,但很少使用它们,并且,根据您的特定情况,您可以/不能依赖于这种功能。

从发送者的角度来看,多播的使用可节省大量资金:只需要执行一个发送操作,而不是n * send。

仅当通过LAN进行通信时,多播才是一种选择。 它无法在Internet上运行。

您可能想在此处使用异步I / O对套接字进行多路分解。 这使您可以同时将数据发送到多个套接字,并使用异步事件处理程序来处理每次传输。

我建议研究Boost ASIO,以一种可移植的方式来完成此任务。 您也可以使用特定于OS的系统调用(例如UNIX上的poll / select或Linux上的epoll)来执行此操作,但这要复杂得多。

除非您拥有非常昂贵的交换机,否则最好对每个主机进行udp单播。 是的,对于大多数CPU比您的PC弱得多的大多数交换机,广播/多播实际上可能会更慢。 除了简单的转发之外,执行任何其他操作都会极大地减慢它们的速度。

做一个基准找出答案。

异步套接字编程绝对是必经之路! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM