多线程boost-asio服务器(vs boost异步服务器教程)

时间:2012-12-18 15:47:52

标签: multithreading client-server boost-asio

我正在关注boost-asio tutorial,并且不知道如何使用boost创建多线程服务器。我编译并测试了daytime clientdaytime synchronous server并改进了通信(服务器向客户端询问命令,处理它然后将结果返回给客户端)。但是这个服务器一次只能处理一个客户端。

我想使用boost来制作一个多线程服务器。还有daytime asynchronous server执行

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

在主程序功能中。问题是 - 是在内部的某个地方为每个客户创建一个线程吗?这是一个多线程解决方案吗?如果不是 - 如何使用boost来创建多线程服务器?谢谢你的任何建议。

2 个答案:

答案 0 :(得分:2)

查看this教程。简而言之:

    多个线程中的
  • io_service.run()给出一个线程池
  • 多个io_services给出完全分离的线程

答案 1 :(得分:2)

如果要支持多个客户端,则无需显式使用线程。但为此你应该使用异步调用(而不是同步,这在你列出的教程中使用)。看一下asynchronous echo tcp server示例,它在不使用线程的情况下为多个客户端提供服务。

is boost creating a thread for each client somewhere inside?

使用异步调用时,boost asio正在幕后执行这些操作。它可以使用线程,但通常不会,因为还有其他一些优先机制可以同时处理多个套接字。例如,在Linux上,您有epollselectpoll(按优先顺序排列)。我不确定Windows上的情况是什么,可能还有其他机制或者偏好顺序可能不同。但无论如何,boost asio会解决这个问题,为你的平台选择最好的机制,并将其隐藏在这些异步调用之后。