c++ - boost asio async_tcp_echo_server 示例

标签 c++ multithreading asynchronous boost boost-asio

我正在查看来自 boost 站点的这个示例(出于学习目的):

https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp

在 main 中,我添加了几个线程来运行 io_context。

我实现的行为是我有多个线程在套接字上监听,每个线程都在等待工作并完成整个工作 a-z,所以如果我所有的线程都忙于工作并且另一个客户端向服务器发送一些文本他会挂起,直到某个线程再次可用。

我想要 1 个线程监听套接字并将所有工作排队,并需要一个线程池来处理所有工作。

如果我理解正确,我不需要在 main 中创建一个线程池,而是保持原样,只有主线程接受连接,并在服务器中创建另一个带有线程池的 io_context,并以某种方式让所有 session 使用它池,我不知道怎么写这个。

如果我不将它传递给 session ,我仍然不明白每个 session 如何知道它使用哪个 io_context。

最佳答案

套接字存储一个执行器。该执行者引用 io_context

在旧的 Boost 版本中,套接字将直接存储对 io_service 的引用。

关于c++ - boost asio async_tcp_echo_server 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013536/

相关文章:

c++ - 整数常量对于 "long"类型来说太大了

c++ - 在C++中,是否可以在不修改类的情况下定义对类的隐式转换?

c++ - "stable_sort()ing"C++ 中的 STL <列表>

java - 关系数据库锁定

ios - 只有在方法完成时才继续循环

java - 如何处理从 onComplete 等异步方法获取的值?

jakarta-ee - 超时后的JavaEE 6 AsyncContext行为

c# - 控制台应用程序中的异步

c++ - 正确实现纹理图集

c++ - 来自 c++11 的 std::thread 问题