Channel — 事件通道

第 6 课:Channel — 事件通道 对应源文件: trantor/net/Channel.h — 公共接口 trantor/net/Channel.cc — 实现(仅 112 行) 一、Channel 是什么? Channel 是 trantor Reactor 模式中的中间层,它把一个文件描述符(fd)的事件管理和回调分发封装在一起。 1 2 fd ──── Channel ──── Poller(注册/更新感兴趣的事件) └────── EventLoop(事件就绪后,回调分发) 三个关键概念: events_:当前感兴趣的事件(告诉 Poller 我想监听什么) revents_:Poller 返回的实际发生的事件(poll/epoll 填写) 回调函数:事件发生后调用哪个函数 Channel 不拥有 fd——fd 的生命周期由 Socket 对象管理,Channel 只是"贴在" fd 上的事件管理标签。 二、事件标志位 1 2 3 4 // Channel.cc 第 31-34 行 const int Channel::kNoneEvent = 0; const int Channel::kReadEvent = POLLIN | POLLPRI; // 可读 + 紧急数据 const int Channel::kWriteEvent = POLLOUT; // 可写 为什么用 POLLIN/POLLOUT 而不是 EPOLLIN/EPOLLOUT? ...

March 12, 2025 · 8 min · 1684 words