上一篇文章介绍了reactor模型,本文介绍如何通过reactor模型监听TCP连接
更多请参考:我的自研网络框架 znet,欢迎Star与提Issue。
Reactor实现方案
- 方案一:单进程/线程,启动单个Reactor,单个Acceptor。不用考虑进程间通信以及数据同步的问题,无法充分利用多核CPU。处理业务逻辑的时间不能太长,否则会延迟响应,所以不适用于计算机密集型的场景。
- 方案二:单进程/多线程,启动单个Reactor,多个Acceptor。解决方案一的问题无法利用多核CPU的问题。但是它依然只有一个主线程处理业务,无法解决瞬时高并发带来的性能问题。
- 方案三:多进程/多线程,启动多个Reactor(一个MainReactor+多个SubReactor),多个Acceptor。主 Reactor 只负责监听事件,响应事件的工作交给了从 Reactor。
模块设计
- Acceptor: 负责与客户端建立链接,并将连接发送给Reactor
- Reactor: 通过Epoll负责注册连接与监听活跃连接
- SubReactor: 负责管理连接,可支持分片特性,提高吞吐
- Thread: 负责处理数据包的接收、解包、打包、发送,可支持多线程并发处理
流程设计
参考网图:
接口设计
1 | type Acceptor interface{ |
- 本文作者: Hongker
- 本文链接: https://hongker.github.io/2022/11/16/golang-tcp-reactor-acceptor/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!