TCP IPV4通信,全部基于线程操作,提升为实时进程调度,需要root权限运行。
(1)每线程管理一个连接,适用与短链接、快速连接
(2)采用超时 + 阻塞 进行读写
(1) main 线程负责启动所有工作线程,启动成功后负责监听外部发送的信号。
(2) 一个reactor 线程负责监听连接池里所有连接及等待连接的socket
1. 若等待连接socket有事件发生,则注册该socket 到连接池中,置READY状态。
2. 若连接池中READY状态,则将连接注册到循环事件队列(common/queue.h)中,置BUSY状态。清理发生状态fd的监控。
(3)worker 线程负责从循环事件队列中获取事件,执行相应操作。结束后,连接池中状态置READY,回设
监听reactor 对该fd 的监控
(4)非阻塞读,阻塞+超时写。 内存池管理非阻塞读时,需要保持状态的数据。
(5)比较均衡的模式,长短连接、CPU频繁、IO频繁操作均可使用
(1) main 线程负责启动所有工作线程,启动成功后负责监听外部发送的信号。
(2)一个reactor 线程负责监等待连接的socket, 若监听socket 有事件发生,则accept,并执行:
1. 注册该socket 到连接池中,置BUSY状态。
2. 负载均衡,将该socket 注册到一个压力较小的子reactor。
(3)其余worker线程为子reactor, 每一个子reactor 维护监听 reactor注册过来的事件。
(4)全程非阻塞读写,不会发生等待现象,最大限度利用CPU。 内存池管理非阻塞读,写时,需要保持状态的数据
(5)适用于IO频繁操作。注册运行的回调函数时,主要不要有阻塞,等待操作。
(1)托管与client端的连接管理、内存管理、数据的读取和发送, LOG读写等。
(2)应用方只需要设置回调函数,从指定内存中读数据,业务处理,存储数据到发送内存中。
框架自动进行读写。
void
nf_default_handle()
{
char * read_buf = (char *) nf_server_get_read_buf();
char * write_buf = (char *) nf_server_get_write_buf();
int readed_size = nf_server_get_readed_size();
strncpy(write_buf, read_buf, readed_size);
//Log :: NOTICE("CALL BACK READ DATA %d", readed_size);
nf_server_set_writed_size(readed_size);
nf_server_set_writed_start(readed_size);
}
(1)静态内存:初始化SVR 时候统一创立,SVR结束时统一销毁。运行过程中循环利用,
主要用于线程的读/写 工作缓存区
(2)动态内存: 内存池进行统一的管理、维护。在框架中,主要用于存储读/写cache
存储。
(1) 支持 NOTICE, DEBUG,WARN, ERROR 四种模式
(2) 采用异步日志框架。
(1) 日志解析类, 支持格式
[session]
key=value
#注释
(1) 使用红黑树 (map)管理定时器,支持毫秒级别定时
(2) add_timer_ms(time, 函数指针,(void *)args)
(1) 线程使用启用 FIFO模式调度。
(2) 支持线程优先级设置,默认: Listen 线程优先级为10 ,Work 线程优先级为5。
(1)整体架构基于Factory模式扩充服务器模型。 基于策略模式扩充解析数据格式方法。
(2)扩充模型方法: 填充Factory.h 的结构体, 实现 *pool.h/*pool.cpp,
每个新实现的模型继承NfServer
(3) 扩充解析方法: 解析类继承BaseWork 类, 实现虚方法 work 。