最近一直做一些维护测试的工作,也没有新的东西做,无聊透顶了,很长时间没有接触新的东西。
所以想给自己充充电就看了下ACE的两本书---C++NPv1和C++NPv2。C++NPv1是在TB上买的盗版,质量还行,比较便宜,C++NPv2是在dearbook上买的正版,正版看起来就是舒服些,不过现在好像都绝版了 ^_^
网上也有不少网友针对使用ACE的负面评价,有些评价我也比较认可,不过每个技术都有它的缺点嘛,就像C、C++、Java、C#、PHP、Pyton等等,没有说哪个比哪个好,看具体应用了。抱着取其精华去其糟粕的态度学习了下。其实我学习ACE倒不是说准备使用它,而是觉得ACE在网络通讯结构、C++特性、设计模式这方面用到的知识蛮多的,就当是提高自己这方面能力吧。 因为自己能力有限且项目经验又少,所以看的是晕头转向,花点时间简单的总结下(现在整理的不全,以后有时间再整理),供以后参考,如果觉得哪里写错了,强烈欢迎大家指证。
一: C++NPv1主要涉及到的类:
1.1. Logging_Server 是个抽象类,用来定义接口类型,此类不能实例化。
Logging_Handle 是个日志处理类,被服务器聚合。
1.2. Iterative_Logging_Server 实现基本的循环式服务器。
1.3. Reactor_Logging_Server 实现基本的反应式服务器(本质还是循环式服务器)。
1.4. Reactor_Logging_Server_Ex 实现基本的反应式服务器,
在Reactor_Logging_Server基础上利用Hash_Map绑定一个连接对应一个日志文件。
1.5 Process_Per_Connection_Logging_Server 实现一个连接一个进程模型服务器
1.6 Thread_Per_Connection_Logging_Server 实现一个连接一个线程模型服务器
1.7 RT_Thread_Per_Connection_Logging_Server 对Thread_Per_Connection_Logging_Server功能的扩展,
增加了实时机制,即提高数据处理线程的优先级。
二: C++NPv2主要涉及到的类:
2.1. Logging_Accepotr_Ex 和 Logging_Event_Handler_Ex 分别对 Logging_Accepotr、Logging_Event_Handler的功能
扩展, 增加了时间机制,即一段时间里客户没有发送日志文件,则关闭此连接。
2.2 Logging_Accepotr_WFMO 和 Logging_Event_Handler_WFMO分别对 Logging_Accepotr_Ex 和
Logging_Event_Handler_Ex的功能扩展, 增加了针对竞争状态的保护,即增加一个互斥体来显示地序列化对“客户
日志Daemon连接线程池的线程”的访问
2.3 Reactor_Logging_Server模版类需要ACCEPTOR参数化, 可以灵活选择Logging_Accepotr、Logging_Accepotr_Ex、
Logging_Accepotr_WFMO
2.4 ACE_Reactor有三种不同的实现:
ACE_Select_Reactor ACE Reactor在linux下默认的单线程实现(添加一个控制线程,用来优雅地关闭程序),利用
Logging_Accepotr 和 Logging_Event_Handler 实现。
ACE_TP_Reactor 是ACE_Select_Reactor线程池的实现,利用Logging_Accepotr_Ex 和 Logging_Event_Handler_Ex
实现。
ACE_WFMO_Reactor ACE Reactor在window下默认的多线程实现, 利用Logging_Accepotr_WFMO和
Logging_Event_Handler_WFMO来实现。
2.5 Reactor_Logging_Server_Adapter 继承自ACE_Service_Object.它聚合了模版Reactor_Logging_Server<ACCEPOTOR>
2.6 从模版Reactor_Logging_Server_Adapter定义了很多服务,供静态、动态加载使用。
包括: 类Server_Logging_Daemon、Server_Logging_Daemon_Ex、TPC_Logging_Server等。
个人理解:
C++NPV1里的Logging_Server 在功能上类似 C++NPV2里的 ACE_Event_Handler ,
C++NPV1里的Iteractor_Logging_Server 功能上类似 C++NPV2里的 Logging_Event_Handler
三: C++NPV1涉及到的类图
四: C++NPV1的线程、进程涉及到的类图
五: C++NPV2涉及到的类图
六:C++NPV2的第5章涉及到的类图
七: 总结
C++NPV1和C++NPv2举的例子主要是网络日志服务器,从最原始的网络模型开始讲到最后用ACE提供的框架来实现,粗略翻下书感觉蛮乱的,不过理清楚每个章节关系及每个类之间的关联后就觉得稍微清晰了点。 上面记录的只是部分内容,以后有时间再继续跟新。