# 项目框架
reactor模式
server 单例模式
tcp粘包的处理
单线程创建与销毁tcp连接,多线程处理任务(线程池)
队列,加锁
epoll oneshot
signal(SIGPIPE, SIG_IGN)
tcp连接存活的确认:
```cpp
int keepAlive = 1; // 非0值,开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行此TCP层的探测
int keepInterval = 5; // 探测发包间隔为5秒
int keepCount = 3; // 尝试探测的最多次数
// 开启探活
setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(sockfd, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(sockfd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(sockfd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount)
```
多线程数据的安全:锁结构与无锁的原子操作
数据库unordered_map
数据的过期时间class data.expired
文件事件任务 工厂模式 开闭原则 依赖倒转原则 迪米特原则 里氏替换原则
定时器任务 定时清理过期数据,关闭失效连接