服务器(BT TRACKER) 网络层跟业务层 线程池的使用(基于boost异步asio)

服务器(BT TRACKER) 网络层和业务层 线程池的使用(基于boost异步asio)
1.想做一个服务器(BT_tracker,有开源的bnbt,但是是基于单线程的),逻辑很简单,就是客户发送http get请求报文,服务器回复,但是回复的信息是根据之前客户端连接得到的信息。

现在的想法就是:网络层开辟线程池,只负责处理socket的接收,业务层开辟一个线程池,负责数据的处理。

2.网络层构架(基于boost):创建一个线程池,池里面开辟N个io_service,并run。也就是N个线程 同时 监控N个底层IO。
accept使用第一个io_service,来的第一个客户端连接使用第二个io_service,以此类推,直到用完,再从第一个开始。
这样可以异步的并发接收大量的客户段的连接。

3.业务层构架:之前想的是业务层不通过线程池,因为每个新的客户端段连接,都会创建一个新的connection类,里面负责异步的read数据,所以本想每次将业务的对象通过引用或者指针传入,这样多个connection可以将统计的信息都放入业务层的类,然后通过业务层的实例的handler方法,返回需要的数据。

但是现在的要求是,业务层也需要是一个线程池构架,所以我想网络层线程池的中的数据得放入一个全局的队列,类似:

queue q;
server(8,8090);//网络层,即开辟8个线程,端口号为8090,里面开辟了8个线程,异步接收客户端数据。
而在server内部,每个connection接收到的数据,解析后,都存入队列q里面,然后发送例如post信号告知业务层队列有数据需要处理。

handler(8);//业务层,开辟8个线程,里面是死循环,类似
while{
查询队列是否为空,为空的话,则阻塞等待,直到网络层 发送post信号,激活一个处理线程。
不为空,则处理,即得到需要给客户端的数据。
}

如果按照这种思路,可能不太对,那么业务层的得到的数据如何send给客户啊,不能在里面调用send的,这样破坏了网络层和业务层的结构,求指点啊。谢谢

------解决方案--------------------
可以参考apache的socket模块
------解决方案--------------------
appache比较复杂
spserver,一个简单的TCP服务器,实现了HSHA, L/F模式,里面有线程池