1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 启动TcpServer │ ▼ 创建Acceptor → 绑定baseLoop(主EventLoop) → 创建listenfd → socket/bind/listen │ ▼ Acceptor创建AcceptorChannel(绑定listenfd) → 注册到baseLoop的Poller │ ▼ baseLoop进入EventLoop::loop() → Poller调用epoll_wait监听listenfd的可读事件 │ ▼ 客户端发起连接 → listenfd触发可读事件 │ ▼ Poller将AcceptorChannel加入activeChannels_ → EventLoop处理Channel回调 │ ▼ Acceptor执行accept() → 获取新连接connfd → 创建TcpConnection实例 │ ▼ TcpConnection创建Socket(封装connfd)、ConnectionChannel(绑定connfd) │ ▼ 通过EventLoopThreadPool轮询getNextLoop() → 选择一个subLoop(从EventLoop) │ ▼ 将ConnectionChannel注册到subLoop的Poller → subLoop监听connfd的读写事件 │ ▼ TcpConnection维护发送/接收Buffer → 数据流转: 应用数据 → Buffer → TCP发送缓冲区 → send() recv() → TCP接收缓冲区 → Buffer → 应用数据 │ ▼ TcpServer维护connections_,管理所有TcpConnection实例
|