我正在关注boost-asio tutorial,并且不知道如何使用boost创建多线程服务器。我编译并测试了daytime client和daytime synchronous server并改进了通信(服务器向客户端询问命令,处理它然后将结果返回给客户端)。但是这个服务器一次只能处理一个客户端。
我想使用boost来制作一个多线程服务器。还有daytime asynchronous server执行
boost::asio::io_service io_service;
tcp_server server(io_service);
io_service.run();
在主程序功能中。问题是 - 是在内部的某个地方为每个客户创建一个线程吗?这是一个多线程解决方案吗?如果不是 - 如何使用boost来创建多线程服务器?谢谢你的任何建议。
答案 0 :(得分:2)
查看this教程。简而言之:
答案 1 :(得分:2)
如果要支持多个客户端,则无需显式使用线程。但为此你应该使用异步调用(而不是同步,这在你列出的教程中使用)。看一下asynchronous echo tcp server示例,它在不使用线程的情况下为多个客户端提供服务。
is boost creating a thread for each client somewhere inside?
使用异步调用时,boost asio正在幕后执行这些操作。它可以使用线程,但通常不会,因为还有其他一些优先机制可以同时处理多个套接字。例如,在Linux上,您有epoll,select和poll(按优先顺序排列)。我不确定Windows上的情况是什么,可能还有其他机制或者偏好顺序可能不同。但无论如何,boost asio会解决这个问题,为你的平台选择最好的机制,并将其隐藏在这些异步调用之后。