<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                libevent庫中包含了http的組件API,我們可以基于這些API實現http的server,API的頭文件主要在 libevent-2.1.12-stable/include/event2/http.h 中。 ### httpd是我們基于libevent針對http封裝出來的類,將其中API調用的細節進行了統一處理,因此借助httpd可以非常容易搭建出http(s)服務器出來,主要接口如下: ![](https://img.kancloud.cn/47/e7/47e7db67b7d46a0c6c4dd64aa4955f40_832x282.png) ### 兩個構造函數,第一個是搭建http服務器,第二個需要證書和私鑰用于搭建https服務器;參數需要給ev\_proxy的對象指針還有port,port是網絡端口。收到數據后會回調on\_request給上層應用,上層應用處理完需要調用on\_response進行響應。 ### 首先我們看看如何基于httpd構建一個https服務器: ![](https://img.kancloud.cn/7f/60/7f602cdcd7dd29e782d6caea942070f5_832x562.png =700x) ### 非常簡單,定義一個類繼承httpd,然后把必須的參數給到httpd,有數據了就會調用到on\_request函數中,我們調用on\_response進行響應即可;主函數就更簡單了,實例化shttpd就可以。 ### 核心源碼在于httpd.cpp中,有幾個地方需要說明下: 構造函數 ![](https://img.kancloud.cn/95/ad/95ad7e4673fae8ced009932dcdbcfcde_832x272.png) ### 構造函數中會初始化ssl\_,true表示https,false表示http,然后在builder中啟動服務器,builder根據ssl\_確定是否要初始ssl: ![](https://img.kancloud.cn/88/00/88008e4df9b4461647b1094d79bcad53_832x318.png) ### evhttp\_new是實例化一個http對象; ### evhttp\_set\_cb可以根據URI來設置回調函數,比如”/app”; ### ssl\_init 實際上是和openssl有關系: ![](https://img.kancloud.cn/85/f0/85f09d214acf10362d31f367b04d110a_832x360.png) ### 基本就是初始化,設置證書,設置密鑰等操作。 ### HTTP是一個請求/響應的邏輯,httpd中設置了響應的超時時間3500ms,如果超時了,那么會自動回復客戶端一個錯誤,這個時間可以在on\_request中進行修改: ``` void httpd::on_request(struct evhttp_request *req, const char *tag) ``` 其中有一句代碼: session->ticks = 35; // 35 \* 100ms
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看