【发布时间】:2010-11-30 03:47:41
【问题描述】:
基本上,我想要实现的是实现一个通用的多线程 TCP 服务器,该服务器可以处理任意请求,供 2 台具有略微不同需求的不同服务器使用。
我的要求是:
- 在收到完整的初始请求之前,无法开始处理请求。 (基本上,我有一个固定大小的请求标头,其中包括整个请求的大小)。
- 处理请求可能会导致向请求客户端发送多个响应消息。 IE,通常,请求可以在单个响应中处理,但有时,为了响应长时间运行的数据库事务,我需要 ping 回客户端,让他们知道我仍在工作并且不会超时连接.
为了实现这一点,我一直在密切关注 boost v1.44 中的 HTTP 服务器示例 #2。通常,该示例适用于简单的情况。我注意到的是,当我扩展到同时处理多个请求时,我所做的更改以某种方式导致所有请求都由单个线程串行处理。显然,我做错了什么。
由于雇主的限制,我无法发布我正在使用的全部实际代码,但我只想说,我保留了异步调用以接受新连接,但已将异步读/写替换为同步来电。如果有你认为需要看的具体部分,我可以看看我能做什么。
基本上,我正在寻找的是如何将 boost::asio 用于多线程 TCP 服务器的指针,其中单个连接由具有同步 I/O 的单个线程处理。同样,请记住,我的抽象基于 http 服务器示例 #2(每个 CPU 一个 io_service),但我可以灵活地更改
【问题讨论】:
-
只是出于兴趣,您为什么要去掉 async_read/write 调用?它是异步 IO,可让您扩展......大概您已经确认
io_service确实已配置了您需要的线程数? -
我总是发现 ASIO 缺乏文档。
标签: c++ boost-asio