C++将数据发送到多个UDP套接字 我得到了一个C++非阻塞服务器套接字,所有的客户端都存储在一个STD::MAP结构中。

C++将数据发送到多个UDP套接字 我得到了一个C++非阻塞服务器套接字,所有的客户端都存储在一个STD::MAP结构中。,c++,sockets,broadcast,C++,Sockets,Broadcast,我可以为每个clientObject调用send方法来向连接的客户端发送一些东西,这已经很好地工作了 但向所有广播发送消息?我想知道: 有比在所有客户机上执行for/loop并在每次迭代中调用ClientObject->sendfoo更好的方法吗 或者我应该试试看多播套接字吗 提前谢谢。 碎布。多播将是更好的选择。。。只要您谈论的是本地节点,即局域网上的广播/多播域内的节点 当然,有多播分发协议可以更广泛地分散此类消息,但它们很少使用,而且,根据您的具体情况,您可以/不可以依赖于此类设施 从发送

我可以为每个clientObject调用send方法来向连接的客户端发送一些东西,这已经很好地工作了

但向所有广播发送消息?我想知道: 有比在所有客户机上执行for/loop并在每次迭代中调用ClientObject->sendfoo更好的方法吗

或者我应该试试看多播套接字吗

提前谢谢。
碎布。

多播将是更好的选择。。。只要您谈论的是本地节点,即局域网上的广播/多播域内的节点

当然,有多播分发协议可以更广泛地分散此类消息,但它们很少使用,而且,根据您的具体情况,您可以/不可以依赖于此类设施


从发送方的角度来看,使用多播可以节省大量成本:只需执行一次发送操作,而不是n*send。

多播只是通过LAN进行通信时的一种选择。它在互联网上不起作用

这里您可能想做的是使用异步I/O对套接字进行解复用。这允许您同时向多个套接字发送数据,并使用异步事件处理程序处理每次传输


我建议研究BoostASIO,寻找一种可移植的方法来实现这一点。您也可以使用特定于操作系统的系统调用,如UNIX上的poll/select或Linux上的epoll来执行此操作,但这要复杂得多。

除非您有那些非常昂贵的交换机,否则最好对每个主机执行udp单播。是的,对于大多数CPU比PC更弱的交换机来说,广播/多播实际上会更慢。除了简单的转发之外,做任何事情都会大大降低它们的速度


做一个基准测试来找出答案。

异步套接字编程绝对是一个不错的选择!:

多播可以在Internet上工作,因为大多数网络管理员通常会忘记一些限制和一些适当的路由器配置。举个例子,你可以通过多播收听高质量的广播或观看BBC的高质量电视节目:你考虑过使用ASIO图书馆吗?ASIO库究竟是如何帮助OP的?