1

我正在关注boost-asio 教程,但不知道如何使用 boost 制作多线程服务器。我已经编译并测试了日间客户端日间同步服务器并改进了通信(服务器向客户端询问命令,处理它,然后将结果返回给客户端)。但是这个服务器一次只能处理一个客户端。

我想使用 boost 来制作多线程服务器。还有白天执行的异步服务器

boost::asio::io_service io_service;
tcp_server server(io_service);
io_service.run();

在主程序功能中。问题是 - boost 是否为内部某处的每个客户端创建了一个线程?这是多线程解决方案吗?如果没有 - 如何使用 boost 制作多线程服务器?感谢您的任何建议。

4

2 回答 2

3

看看这个教程。简而言之:

  • 多线程中的 io_service.run() 给出一个线程池
  • 多个 io_services 提供完全分离的线程
于 2012-12-18T16:36:55.323 回答
2

当您想要支持多个客户端时,您不需要显式使用线程。但是为此,您应该使用异步调用(与您列出的教程中使用的同步相反)。看看异步 echo tcp 服务器示例,它为多个客户端提供服务而不使用线程。

is boost creating a thread for each client somewhere inside?

在处理异步调用时,boost asio 在幕后做这些事情。它可以使用线程,但通常不会,因为有其他首选机制可以同时处理多个套接字。例如在 linux 上你有epollselectpoll(按优先顺序)。我不确定 Windows 上的情况如何,可能还有其他机制,或者偏好顺序可能不同。但无论如何,boost asio 会处理这个问题,为您的平台选择最佳机制并将其隐藏在那些异步调用后面。

于 2012-12-30T13:09:53.307 回答