【问题标题】:Is it possible to have two boost acceptors in the same program?同一个程序中是否可以有两个升压受体?
【发布时间】:2026-01-30 20:15:02
【问题描述】:

我的 boost 服务器意外停止接受传入连接,因为我团队中的其他人在不同的线程(使用不同的端口)中使用 boost 接受器创建了另一个服务器?正常吗,如何让两台服务器独立工作,互不干扰?

已解决:接受器与它无关,这家伙在某处启动了无限循环,阻塞了其他组件。我想这就是团队工作不协调时会发生的情况:(对不起,伙计们,他们一如既往地是最好的

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为问题的根本原因在其他地方
  • 公平地说,这种帖子以一种偶然的方式非常有用。通常,使一个项目绊倒的事情也会在另一个项目中蔓延。 this kindthis 就是一个很好的例子。我认为你的问题对 SO 很好。 (甚至没有提到像these这样的挂断)

标签: c++ boost boost-asio


【解决方案1】:

按照设计,我们在单个 io_service 中使用多个接受器就好了。

此外,我们正在多个其他 io_service 实例之间共享工作,使用相同的套接字,这很好,正如设计的那样。

您的代码库中可能会发生反模式:如果人们在您的 io_service 实例上调用 stop(),那么是的,这将对同样在同一实例上排队的任何其他异步操作造成严重破坏。

因此,一般来说,我们的想法是避免在共享的io_service 实例上使用stop() 或类似的“生命周期”操作。此类调用的唯一合适时间是在强制关闭序列期间,但真正优雅的关闭应该让所有活动连接关闭并耗尽待处理的工作,以便运行io_service::run 的线程会自发地运行无论如何都要完成。

另见:

【讨论】:

  • @theshmoo,因为您很好地询问了现在已删除的答案:添加了示例链接。特别是最后一个链接有一个详细的示例设置,还详细介绍了正常关闭
最近更新 更多