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

我可以为每个clientObject调用send()方法,以便向连接的客户端发送内容,并且已经很好用了。

但是为了向所有人发送信息(广播?)我想知道: 对于所有客户端的for / loop以及每次迭代调用ClientObject-> send(“foo”)有什么好处?

或者我应该试着看一下多播套接字?

提前致谢。 抹布。

有帮助吗?

解决方案

如果您通过LAN进行通信,则只能选择多播。它无法在互联网上运行。

您可能要做的是使用异步I / O解压缩套接字。这允许您同时将数据发送到多个套接字,并使用异步事件处理程序来处理每个传输。

我建议以可移植的方式查看Boost ASIO。您也可以使用特定于操作系统的系统调用(例如UNIX上的poll / select或Linux上的epoll)来执行此操作,但它要复杂得多。

其他提示

多播将是更优选的......只要您正在谈论本地节点,即在“广播/多播”内。局域网上的域名。

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

从发送者的角度来看,多播的使用转化为大量节省:只需要发送一个发送操作而不是n *发送。

除非你有那些非常昂贵的交换机,否则你最好对每台主机进行udp单播。是的,广播/多播实际上对于大多数具有比你的pc更睿的CPU的交换机来说更慢。除了简单的转发之外做任何其他事情都会大大减慢它们的速度。

做一个基准来找出答案。

异步套接字编程绝对是要走的路! :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top