使用epoll和协程处理信息的socket通信库
- github链接
- 详细文档见readme
- 底层是
ucontext和epoll - 提供一个
EpollServer类 - 基于上一个协程库进行了面向对象的重构实现
结构
- 创建一个服务器socket
- 使用epoll检测每个事件
- 检测到新的客户端连接的时候,给对应的线程置一个flag,提示这个线程需要创建一个新的协程处理客户端链接的问题
- 新的协程自己在线程内创建协程(最好在同一个线程内创建和使用协程,否则会导致容易产生segmentation fault
- 创建之后将协程状态设置为suspend
- 等待epoll接收到信号之后,通过一个哈希映射将对应的协程状态设置为runnable提示该协程的调度器可以上处理机运行
- 然后对应的线程将协程调度上处理及,协程处理完之后会继续将自己设置为suspend状态并且下处理机,等待epoll激活自己
- 增加了定时器的功能,防止协程在睡眠的时候阻塞,提高时间利用率
在命令行输出有颜色和格式的字符
\033[0m # 重置所有属性 |
- 红色字:
echo -e "\033[31mHello, World!\033[0m" - 加粗、下划线、红色字体
echo -e "\033[1;4;31mHello, World!\033[0m"使用
EpollServer ep(<线程数>, <端口号>);
- 头文件是
epollServer.h - 测试文件是
client.cpp - 编译指令
g++ cothread.cpp main2.cpp epollServer.cpp -o test1 -lpthread -g