国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

1.6.C++項目:仿muduo庫實現(xiàn)并發(fā)服務器之channel模塊的設計

這篇具有很好參考價值的文章主要介紹了1.6.C++項目:仿muduo庫實現(xiàn)并發(fā)服務器之channel模塊的設計。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

項目完整版在:

一、channel模塊:事件管理Channel類實現(xiàn)

1.6.C++項目:仿muduo庫實現(xiàn)并發(fā)服務器之channel模塊的設計,CodeCrafters,服務器,c++,java

二、提供的功能

1.對監(jiān)控事件的管理
描述符是否可讀
描述符是否可寫
對描述符監(jiān)控可讀
對描述符監(jiān)控可寫
解除可讀事件監(jiān)控
解除可寫事件監(jiān)控
解除所有事件監(jiān)控
2.對監(jiān)控事件觸發(fā)后的處理
設置對于不同事件的回調處理函數(shù)
明確觸發(fā)了某個事件該如何處理文章來源地址http://www.zghlxwxcb.cn/news/detail-716723.html

三、實現(xiàn)思想

(一)功能

對socket套接字的操作進行封裝。

(二)意義

對socket套接字的操作進行封裝。

(三)功能設計

1.對監(jiān)控事件的管理
描述符是否可讀
描述符是否可寫
對描述符監(jiān)控可讀
對描述符監(jiān)控可寫
解除可讀事件監(jiān)控
解除可寫事件監(jiān)控
解除所有事件監(jiān)控
2.對監(jiān)控事件觸發(fā)后的處理
設置對于不同事件的回調處理函數(shù)
明確觸發(fā)了某個事件該如何處理

四、代碼

(一)框架

class Channel {

        private:
                int _fd;
                uint32_t events;  // 當前需要監(jiān)控的事件
                uint32_t revents; // 當前連接觸發(fā)的事件
                using eventCallback = std::function<void()>>;
                eventCallback _read_callback;  // 可讀事件被觸發(fā)的回調函數(shù)
                eventCallback _error_callback; // 可寫事件被觸發(fā)的回調函數(shù)
                eventCallback _close_callback; // 連接關閉事件被觸發(fā)的回調函數(shù)
                eventCallback _event_callback; // 任意事件被觸發(fā)的回調函數(shù)
                eventCallback _write_callback; // 可寫事件被觸發(fā)的回調函數(shù)
        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(); // 啟動讀事件監(jiān)控
                void enableWrite(); // 啟動寫事件監(jiān)控
                void disableRead();     // 關閉讀事件監(jiān)控
                void disableWrite(); // 關閉寫事件監(jiān)控
                void disableAll();  // 關閉所有事件監(jiān)控
                void Remove();  //移除監(jiān)控
                void handleEvent(); // 事件處理,一旦觸發(fā)了某個事件,就調用這個函數(shù)!

};

(二)完整

class Channel {

        private:
                int _fd;
                uint32_t events;  // 當前需要監(jiān)控的事件
                uint32_t revents; // 當前連接觸發(fā)的事件
                using eventCallback = std::function<void()>>;
                eventCallback _read_callback;  // 可讀事件被觸發(fā)的回調函數(shù)
                eventCallback _error_callback; // 可寫事件被觸發(fā)的回調函數(shù)
                eventCallback _close_callback; // 連接關閉事件被觸發(fā)的回調函數(shù)
                eventCallback _event_callback; // 任意事件被觸發(fā)的回調函數(shù)
                eventCallback _write_callback; // 可寫事件被觸發(fā)的回調函數(shù)
        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() {// 啟動讀事件監(jiān)控
                        _events |= EPOLLIN; // 后面會添加到EventLoop的事件監(jiān)控!
                }
                void enableWrite() { // 啟動寫事件監(jiān)控 
                        _events |= EPOLLOUT; // 后面會添加到EventLoop的事件監(jiān)控!
                }
                void disableRead() {    // 關閉讀事件監(jiān)控
                        _events &= ~EPOLLIN;   // 后面會修改到EventLoop的事件監(jiān)控!
                }
                void disableWrite() { // 關閉寫事件監(jiān)控 
                        _events &= ~EPOLLOUT;
                }
                void disableAll() { // 關閉所有事件監(jiān)控
                        _events = 0;
                }
                void Remove();  // 后面會調用EventLoop接口移除監(jiān)控
                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();
                                }
                        /*不管任何事件,都調用的回調函數(shù)*/
                        if (_event_callback) _event_callback();
        }

};

到了這里,關于1.6.C++項目:仿muduo庫實現(xiàn)并發(fā)服務器之channel模塊的設計的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 1.16.C++項目:仿muduo庫實現(xiàn)并發(fā)服務器之HttpContext以及HttpServer模塊的設計

    1.16.C++項目:仿muduo庫實現(xiàn)并發(fā)服務器之HttpContext以及HttpServer模塊的設計

    添加請求—— 處理函數(shù)映射信息(GET/POST/PUT/DELETE) 設置靜態(tài)資源根目錄 設置是否啟動超時連接關閉 設置線程池中線程數(shù)量 啟動服務器 OnConnected - 用于給TcpServer設置協(xié)議上下文 OnMessage - 用于進行緩沖區(qū)數(shù)據(jù)解析處理 獲取上下文,進行緩沖區(qū)數(shù)據(jù)對象 請求的路由查 找 靜態(tài)資

    2024年02月07日
    瀏覽(35)
  • 【項目設計】仿 muduo 庫實現(xiàn) OneThreadOneEventLoop 式并發(fā)服務器

    【項目設計】仿 muduo 庫實現(xiàn) OneThreadOneEventLoop 式并發(fā)服務器

    本項目主要是模仿 muduo 庫實現(xiàn)一個以主從 Reactor 為模型,以 OneThreadOneEventLoop 為事件驅動的高并發(fā)服務器組件。通過這個服務器組件,我們可以簡潔快速的搭建出一個高性能的 TCP 服務器。并且組件內部會提供不同的應用層協(xié)議支持,組件使用者可以通過這些協(xié)議快速的完成

    2024年04月23日
    瀏覽(39)
  • 一、C++項目:仿muduo庫實現(xiàn)高性能高并發(fā)服務器

    一、C++項目:仿muduo庫實現(xiàn)高性能高并發(fā)服務器

    仿mudou庫one thread oneloop式并發(fā)服務器實現(xiàn) 仿muduo庫One Thread One Loop式主從Reactor模型實現(xiàn)高并發(fā)服務器: 通過實現(xiàn)的高并發(fā)服務器組件,可以簡潔快速的完成一個高性能的服務器搭建。并且,通過組件內提供的不同應用層協(xié)議支持,也可以快速完成一個高性能應用服務器的搭建

    2024年02月07日
    瀏覽(34)
  • 基于多反應堆的高并發(fā)服務器【C/C++/Reactor】(中)Channel 模塊的實現(xiàn)

    基于多反應堆的高并發(fā)服務器【C/C++/Reactor】(中)Channel 模塊的實現(xiàn)

    在這篇文章中雖然實現(xiàn)了能夠和多客戶端建立連接,并且同時和多個客戶端進行通信。 基于多反應堆的高并發(fā)服務器【C/C++/Reactor】(上)-CSDN博客 https://blog.csdn.net/weixin_41987016/article/details/135141316?spm=1001.2014.3001.5501 但是有一個 問題(O_O)? : 這個程序它是單線程的。如果我們想

    2024年02月03日
    瀏覽(94)
  • 仿muduo庫實現(xiàn)one thread one loop式并發(fā)服務器

    仿muduo庫實現(xiàn)one thread one loop式并發(fā)服務器

    ? 文章目錄 一、項目簡介 二、項目整體認識 2、1?HTTP服務器 2、2 Reactor模型 三、預備知識 3、1 C++11 中的 bind 3、2?簡單的秒級定時任務實現(xiàn) 3、3?正則庫的簡單使用 3、4?通用類型any類型的實現(xiàn) 四、服務器功能模塊劃分與實現(xiàn) 4、1 Buffer模塊 4、2 Socket模塊 4、3 Channel模塊 4、

    2024年04月09日
    瀏覽(22)
  • 基于多反應堆的高并發(fā)服務器【C/C++/Reactor】(下)重構Channel類

    一、C語言 Channel.h Channel.c 二、C++ Channel.h Channel.cpp ?

    2024年01月21日
    瀏覽(108)
  • 基于muduo網(wǎng)絡庫實現(xiàn)的集群聊天服務器

    基于muduo網(wǎng)絡庫實現(xiàn)的集群聊天服務器

    !??!項目是照著騰訊課堂施磊老師的視頻學習,僅供個人學習記錄使用?。。??。?!項目是照著騰訊課堂施磊老師的視頻學習,僅供個人學習記錄使用?。?! ?。?!項目是照著騰訊課堂施磊老師的視頻學習,僅供個人學習記錄使用!??! 使用muduo網(wǎng)絡庫搭建網(wǎng)絡核心模塊

    2024年04月26日
    瀏覽(19)
  • 【實戰(zhàn)項目】c++實現(xiàn)基于reactor的高并發(fā)服務器

    【實戰(zhàn)項目】c++實現(xiàn)基于reactor的高并發(fā)服務器

    基于Reactor的高并發(fā)服務器,分為反應堆模型,多線程,I/O模型,服務器,Http請求和響應五部分 ?全局 Channel 描述了文件描述符以及讀寫事件,以及對應的讀寫銷毀回調函數(shù),對應存儲arg讀寫回調對應的參數(shù) ?Channel 異或 |:相同為0,異為1 按位與:只有11為1,其它組合全部

    2024年02月12日
    瀏覽(32)
  • C++項目——集群聊天服務器項目(一)項目介紹、環(huán)境搭建、Boost庫安裝、Muduo庫安裝、Linux與vscode配置

    C++項目——集群聊天服務器項目(一)項目介紹、環(huán)境搭建、Boost庫安裝、Muduo庫安裝、Linux與vscode配置

    今天開始想更新一個C++項目,實現(xiàn)一個 支持跨服務器通信、支持負載均衡的集群聊天服務器項目 。項目會應用muduo網(wǎng)絡庫、CMake編譯、MySQL數(shù)據(jù)庫、JSon序列化與反序列化、Redis消息訂閱模式以及Nginx負載均衡功能。 有興趣的寶可以跟我一起實操起來,鞏固自己的C++學習吧~ 本項

    2024年04月14日
    瀏覽(91)
  • 模擬實現(xiàn)消息隊列項目(系列4) -- 服務器模塊(內存管理)

    模擬實現(xiàn)消息隊列項目(系列4) -- 服務器模塊(內存管理)

    目錄 前言 1.?創(chuàng)建MemoryDataCenter 2. 封裝Exchange 和 Queue方法 3. 封裝Binding操作 4. 封裝Message操作 4.1 封裝消息中心集合messageMap 4.2 封裝消息與隊列的關系集合queueMessageMap的操作 5. 封裝未確認消息集合waitMessage的操作 6. 從硬盤中恢復數(shù)據(jù)到內存中 7. MemoryDataCenter單元測試 結語 ? ?

    2024年02月14日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包