作为服务器,必须具有并发处理能力,同时还必须能减小资源消耗,及时回收资源,容错性好,运行稳定等等。因此,一个良好的架构是这些特性得以实现的基本保证。
本人因公司业务需求,做了两个服务程序,一个是UDP协议,一个是TCP协议。通讯协议都是无状态的。它们总体上都用了同一个架构,有一些小区别。
接收Socket
|
|数据缓存
(提高性能;暂存数据包碎片)|
|控制器
(根据需要创建线程,线程与事务处理器对应,也就是说,线程方法就是事务处理器的唯一public方法。返回值是事务处理器的状态。当状态为“完成”时, 结束线程,销毁事务处理器,回收资源。)
|
| ------------------------------------------------------------- | | | | |事务处理器1 事务处理器2 事务处理器3 事务处理器…… 事务处理n
(处理具体的事务。数据由控制器传入,每次处理结束返回状态给控制器,由控制器来决定下一步工作。)
其实,稍微分析一下就会发现,这个架构思想采用了IOCP思想的一部分,它没有像IOCP那样在线程池中一直运行着几个线程,仍然采取不断地创建、销毁线程的方式,因此性能不如IOCP高,但结构却简单明了,实现起来也容易。实践证明,对于并发量不是特别大(一万个以上)、数据量也不是特别大的情况,还是完全能够胜任的。