项目完整版在: 文章目录 一、channel模块:事件管理Channel类实现二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、代码(一)框架(二)完整 一、cha
对监控事件的管理
描述符是否可读
描述符是否可写
对描述符监控可读
对描述符监控可写
解除可读事件监控
解除可写事件监控
解除所有事件监控
2.对监控事件触发后的处理
设置对于不同事件的回调处理函数
明确触发了某个事件该如何处理
对Socket套接字的操作进行封装。
对socket套接字的操作进行封装。
对监控事件的管理
描述符是否可读
描述符是否可写
对描述符监控可读
对描述符监控可写
解除可读事件监控
解除可写事件监控
解除所有事件监控
2.对监控事件触发后的处理
设置对于不同事件的回调处理函数
明确触发了某个事件该如何处理
class Channel { private: int _fd; uint32_t events; // 当前需要监控的事件 uint32_t revents; // 当前连接触发的事件 using eventCallback = std::function<void()>>; eventCallback _read_callback; // 可读事件被触发的回调函数 eventCallback _error_callback; // 可写事件被触发的回调函数 eventCallback _close_callback; // 连接关闭事件被触发的回调函数 eventCallback _event_callback; // 任意事件被触发的回调函数 eventCallback _write_callback; // 可写事件被触发的回调函数 public: Channel(int fd) : fd(_fd) {} int Fd() {return _fd ;} void setReadCallback(const eventCallback &cb); void setWriteCallback(const eventCallback &cb); void setErrorCallback(const eventCallback &cb); void setCloseCallback(const eventCallback &cb); void setEventCallback(const eventCallback &cb); bool readAble(); // 当前是否可读 bool writeAble(); // 当前是否可写 void enableRead(); // 启动读事件监控 void enableWrite(); // 启动写事件监控 void disableRead(); // 关闭读事件监控 void disableWrite(); // 关闭写事件监控 void disableAll(); // 关闭所有事件监控 void Remove(); //移除监控 void handleEvent(); // 事件处理,一旦触发了某个事件,就调用这个函数!};
class Channel { private: int _fd; uint32_t events; // 当前需要监控的事件 uint32_t revents; // 当前连接触发的事件 using eventCallback = std::function<void()>>; eventCallback _read_callback; // 可读事件被触发的回调函数 eventCallback _error_callback; // 可写事件被触发的回调函数 eventCallback _close_callback; // 连接关闭事件被触发的回调函数 eventCallback _event_callback; // 任意事件被触发的回调函数 eventCallback _write_callback; // 可写事件被触发的回调函数 public: Channel(int fd) : fd(_fd) {} int Fd() {return _fd ;} void SetRevents(uint32_t events) {_revents = events; } void setReadCallback(const eventCallback &cb) { _read_callback = cb;} void setWriteCallback(const eventCallback &cb) { _write_callback = cb; } void setErrorCallback(const eventCallback &cb) { _error_callback = cb; } void setCloseCallback(const eventCallback &cb) { _close_callback = cb; } void setEventCallback(const eventCallback &cb) { _event_callback = cb; } bool readAble() { // 当前是否可读 return (_events & EPOLLIN); } bool writeAble() { // 当前是否可写 return (_events & EPOLLOUT); } void enableRead() {// 启动读事件监控 _events |= EPOLLIN; // 后面会添加到EventLoop的事件监控! } void enableWrite() { // 启动写事件监控 _events |= EPOLLOUT; // 后面会添加到EventLoop的事件监控! } void disableRead() { // 关闭读事件监控 _events &= ~EPOLLIN; // 后面会修改到EventLoop的事件监控! } void disableWrite() { // 关闭写事件监控 _events &= ~EPOLLOUT; } void disableAll() { // 关闭所有事件监控 _events = 0; } void Remove(); // 后面会调用EventLoop接口移除监控 void HandleEvent() { if ((_revents & EPOLLIN) || (_revents & EPOLLRDHUP) || (_revents & EPOLLPRI)) {if (_read_callback) _read_callback(); } if (_revents & EPOLLOUT) { if (_write_callback) _write_callback(); } else if (_revents & EPOLLERR) { if (_error_callback) _error_callback();//一旦出错,就会释放连接,因此要放到前边调用任意回调 }else if (_revents & EPOLLHUP) { if (_close_callback) _close_callback(); } if (_event_callback) _event_callback(); }};
来源地址:https://blog.csdn.net/weixin_54447296/article/details/133439943
--结束END--
本文标题: 1.6.C++项目:仿muduo库实现并发服务器之channel模块的设计
本文链接: https://www.lsjlt.com/news/433514.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0