该框架不依赖于任何第三方组件
- 一个 master 进程和多个 worker 进程模型
- master 进程负责信号的处理
- 比如复活子进程, 日志切割(
kill -USER1 master_pid
) ...
- 比如复活子进程, 日志切割(
- worker 进程处理具体网络请求 (使用 epoll 的 LT 模式)
- master 进程负责信号的处理
- 配置文件和日志系统
- 线程池处理客户端消息
- 线程通过消息队列处理消息的发送
- 连接池采用延迟回收
- 心跳包机制以及通过检测时间队列来回收无效连接
- 使用特定消息格式来解决 tcp 粘包问题
默认下, 代码配置成了 http 模式。 如果需要使用 tcp 模式, 请修改根目录下的 config.mk 的变量。
export USE_HTTP = false
- tcp 模式实现在子类 Mgx_logic_socket
- http 模式实现在子类 Mgx_http_socket
另外,本项目也实现了一个协程库,并且基于该协程库实现了一套 cosocket 的接口, 但是注意并未整合进代码框架中。你可以在 test 目录下看到他们的用法
主要的实现代码:
注:该协程库目前只实现了 x86-64 和 ARM64 平台
在主机中运行
make -j4
./mgx
curl 127.0.0.1:8081 # or view web page in browser
使用 docker 运行
docker build -t mgx:latest .
docker run -itd -p 8081:8081 mgx:latest
curl 127.0.0.1:8081 # or view web page in browser
你可以在浏览器中访问 http://127.0.0.1:8081.