0

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

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

但是对于向所有人发送消息(广播?)我想知道:有什么比对所有客户端执行 for/loop 并在每次迭代中调用 ClientObject->send("foo") 更好的方法?

还是我应该尝试查看多播套接字?

提前致谢。抹布。

4

4 回答 4

1

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

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

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

于 2009-10-24T00:26:17.523 回答
1

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

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

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

于 2009-10-24T00:58:12.393 回答
0

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

做一个基准来找出答案。

于 2009-10-25T00:22:50.760 回答
0

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

于 2009-10-26T18:16:46.110 回答