C++网络编程卷1、卷2概述
转载请注明来源:https://www.cnblogs.com/hookjc/
一: 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提供的框架来实现