<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 介紹 libevent是一個用C語言編寫的、輕量級的開源高性能事件通知庫,由Niels Provos和Nick Mathewson開發。它提供了一種機制來執行事件通知,允許程序在單個線程中高效地處理多個事件源,包括IO事件、定時事件和信號事件,使得開發者能夠構建出響應迅速且易于擴展的網絡應用程序。特別是在需要處理大量并發連接的場景中。它支持多種平臺,包括Linux、Unix和Windows,并且提供了跨平臺的事件處理機制。 > github地址:https://github.com/libevent/libevent ## 核心概念 * **事件循環(Event Loop)**。事件循環是libevent的核心,它不斷地等待和分發事件。開發者需要創建一個事件循環,并在其中注冊感興趣的事件和相應的回調函數。當這些事件發生時,libevent會調用相應的回調函數來處理事件。 * **事件(Event)**。在libevent中,事件是一個抽象的概念,代表了任何可以觸發回調函數的情形。事件可以是網絡IO(如可讀、可寫)、定時器超時或信號到達等。 * **事件基礎結構(Event Base)**。事件基礎結構是管理事件循環和相關資源的核心結構。它負責事件的注冊、分發和清理。每個event_base結構都維護著自己的事件循環和事件隊列。 ## 特性 * **跨平臺**:Libevent 支持多種操作系統,包括 Windows、Linux、BSD 和 macOS,提供了統一的接口來處理不同平臺下的事件通知機制。 * **高性能**:Libevent 基于事件驅動(event-driven)模型,采用非阻塞 I/O,對事件進行異步處理,能夠高效地處理大量并發連接。 * **輕量級**:專注于網絡,與一些其他網絡庫相比,Libevent 的代碼相對精煉、易讀,且專注于網絡功能,避免了不必要的復雜性。 * **支持多種`I/O`多路復用技術**:支持 select、poll、epoll、kqueue、dev/poll 等多種 I/O 多路復用技術,可以根據不同的操作系統和需求選擇合適的機制。 * **支持多種事件類型**:包括網絡 I/O、定時器和信號等事件,用戶可以注冊這些事件并指定相應的回調函數來處理。 ## 安裝與編譯 libevent 的安裝和編譯相對簡單,可以通過源碼編譯或使用包管理器(如 apt-get、yum 等)進行安裝。對于源碼編譯,通常需要先下載 Libevent 的源碼包,然后解壓、配置、編譯和安裝。 查看是否已經安裝 ```bash ls -al /usr/lib | grep libevent ``` 下載 ```bash wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz ``` 解壓libevent ```bash tar -zxvf libevent-2.1.12-stable.tar.gz ``` 配置安裝目錄 ```bash ./configure --prefix=/usr/local/libevent-2.1.12 ``` 編譯安裝 ```bash make && make install ``` > 如果在libevent安裝目錄make之后會生成一個`.libs/`, 里面如果沒有`libevent\_openssl.so`說明系統沒有安裝`openssl`庫。 但是如果安裝了,依然沒有這個文件生成,可能需要制定`openssl`路徑。 ``` ln -s /usr/local/ssl/include/openssl /usr/include/openssl ``` 查看是否安裝成功 ```bash $ ls -al /usr/local/ | grep libevent drwxr-xr-x 5 root root 4096 Mar 17 2024 libevent-2.1.12 ``` ## 安裝測試 在sample目錄下會有已經編譯好的服務器應用程序。 ``` cd libevent-2.1.12-stable/sample ``` 可以拿`hello-world`程序用來測試。 ``` ls dns-example hello-world http-connect.c https_client-openssl_hostname_validation.o le-proxy.c signal-test.o dns-example.c hello-world.c http-connect.o http-server le_proxy-le-proxy.o time-test dns-example.o hello-world.o https-client http-server.c openssl_hostname_validation.c time-test.c event-read-fifo hostcheck.c https-client.c http-server.o openssl_hostname_validation.h time-test.o event-read-fifo.c hostcheck.h https_client-hostcheck.o include.am signal-test event-read-fifo.o http-connect https_client-https-client.o le-proxy signal-test.c ``` ### hello-world **服務端** ``` ./hello-world # 客戶端連接響應如下 flushed answer ``` **客戶端** ``` netcat 172.30.237.24 9995 Hello, World! ``` 如果客戶端收到`Hello, World!`字符串,表示`libevent`在本機可以正常使用。 ### http-server 當使用`./http-server`命令來啟動一個 HTTP 服務器。對于`http-server`,你可以使用`-p`或`--port`參數來指定端口號。最后一個參數為服務器根目錄。 具體的命令格式: ``` ./http-server -p 8886 /home/www/build/libevent-2.1.12-stable/sample/ ``` * 端口:`8886` * 根目錄:`/home/www/build/libevent-2.1.12-stable/sample/` 這兩個命令都會啟動`http-server`,并讓它監聽在`8686`端口上。你可以通過瀏覽器訪問`http://localhost:8686`來查看服務器上的內容。 在根目錄:`/home/www/build/libevent-2.1.12-stable/sample/`新建一個靜態測試文件`tinywan.html` ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tinywan(ShaoBo Wan)</title> </head> <body> <h1>開源技術小棧</h1> </body> </html> ``` **服務端** ``` ./http-server -p 8886 /home/www/build/libevent-2.1.12-stable/sample/ Listening on 0.0.0.0:8886 Got a GET request for </tinywan.html> Got a GET request for </tinywan.html> ``` **客戶端** ``` curl -i http://172.30.237.24:8886/tinywan.html HTTP/1.1 200 OK Content-Type: text/html Date: Thu, 08 Aug 2024 02:12:53 GMT Content-Length: 165 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tinywan(ShaoBo Wan)</title> </head> <body> <h1>開源技術小棧</h1> </body> </html> ``` 訪問首頁 ``` HTTP/1.1 200 OK Content-Type: text/html Date: Thu, 08 Aug 2024 02:16:21 GMT Content-Length: 2206 <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>/</title> <base href='/'> </head> <body> <h1>/</h1> <ul> <li><a href="time-test.o">time-test.o</a> <li><a href="hello-world">hello-world</a> <li><a href="http-connect.c">http-connect.c</a> <li><a href=".deps">.deps</a> <li><a href="openssl_hostname_validation.c">openssl_hostname_validation.c</a> <li><a href=".libs">.libs</a> <li><a href="http-connect">http-connect</a> <li><a href="hostcheck.c">hostcheck.c</a> <li><a href="dns-example.o">dns-example.o</a> <li><a href="signal-test.o">signal-test.o</a> <li><a href=".">.</a> <li><a href="http-server.c">http-server.c</a> <li><a href="time-test.c">time-test.c</a> <li><a href="signal-test">signal-test</a> <li><a href="http-connect.o">http-connect.o</a> <li><a href="https_client-hostcheck.o">https_client-hostcheck.o</a> <li><a href="signal-test.c">signal-test.c</a> <li><a href=".dirstamp">.dirstamp</a> <li><a href="openssl_hostname_validation.h">openssl_hostname_validation.h</a> <li><a href="..">..</a> <li><a href="https_client-openssl_hostname_validation.o">https_client-openssl_hostname_validation.o</a> <li><a href="event-read-fifo.c">event-read-fifo.c</a> <li><a href="http-server.o">http-server.o</a> <li><a href="le-proxy.c">le-proxy.c</a> <li><a href="http-server">http-server</a> <li><a href="event-read-fifo.o">event-read-fifo.o</a> <li><a href="include.am">include.am</a> <li><a href="https_client-https-client.o">https_client-https-client.o</a> <li><a href="le_proxy-le-proxy.o">le_proxy-le-proxy.o</a> <li><a href="hello-world.c">hello-world.c</a> <li><a href="tinywan.html">tinywan.html</a> <li><a href="le-proxy">le-proxy</a> <li><a href="hostcheck.h">hostcheck.h</a> <li><a href="time-test">time-test</a> <li><a href="https-client">https-client</a> <li><a href="dns-example.c">dns-example.c</a> <li><a href="dns-example">dns-example</a> <li><a href="https-client.c">https-client.c</a> <li><a href="event-read-fifo">event-read-fifo</a> <li><a href="hello-world.o">hello-world.o</a> </ul></body></html> ``` ### time-test ``` ~/build/libevent-2.1.12-stable/sample$ ./time-test timeout_cb called at 1723083770: 2.002 seconds elapsed. timeout_cb called at 1723083772: 2.002 seconds elapsed. timeout_cb called at 1723083774: 2.002 seconds elapsed. timeout_cb called at 1723083776: 2.002 seconds elapsed. timeout_cb called at 1723083778: 2.002 seconds elapsed. timeout_cb called at 1723083780: 2.002 seconds elapsed. timeout_cb called at 1723083782: 2.002 seconds elapsed. timeout_cb called at 1723083784: 2.002 seconds elapsed. timeout_cb called at 1723083786: 2.002 seconds elapsed. timeout_cb called at 1723083788: 2.002 seconds elapsed. timeout_cb called at 1723083790: 2.001 seconds elapsed. timeout_cb called at 1723083792: 2.002 seconds elapsed. timeout_cb called at 1723083794: 2.002 seconds elapsed. ``` ## 應用場景 * Web服務器:Libevent 的高性能和異步I/O特性使其成為構建高性能Web服務器的理想選擇。許多Web服務器,如Nginx的部分模塊,都使用了Libevent來處理高并發連接。 * 聊天服務器:在即時通訊系統中,Libevent能夠處理大量用戶的實時消息推送和聊天功能。它支持非阻塞的socket I/O,使得單個線程可以管理成千上萬個并發連接,非常適合構建高性能的聊天服務器。 * 游戲服務器:游戲服務器需要處理大量游戲客戶端的連接請求和消息收發。Libevent能夠高效地處理這些并發連接,支持大量玩家同時在線,確保游戲的流暢運行。 * 分布式系統:在分布式系統中,Libevent可以作為節點間通信的基礎庫,處理心跳檢測、數據同步等任務。它的跨平臺特性和高效的事件處理機制使得它非常適合在分布式系統中使用。 * 高性能網絡客戶端:除了服務器應用外,Libevent還可以用于構建高性能的網絡客戶端程序。通過其提供的事件驅動模型和非阻塞I/O特性,客戶端程序可以高效地處理網絡請求和響應。 * 緩存系統:著名的分布式緩存系統Memcached就是基于Libevent實現的。Memcached需要處理大量的并發讀寫請求,Libevent的高性能和異步I/O特性使其成為實現這種高性能緩存系統的關鍵組件。 * RPC(遠程過程調用)系統:RPC系統需要高效地在不同節點之間傳輸數據和調用遠程過程。Libevent的異步I/O和事件驅動特性使得它非常適合用于構建高性能的RPC系統。 * 其他網絡應用:除了上述應用場景外,Libevent還可以用于構建各種需要高效處理并發連接的網絡應用,如DNS服務器、FTP服務器、流媒體服務器等。 總的來說,Libevent以其高性能、輕量級、跨平臺和豐富的API等特性,在網絡編程中發揮著重要作用,特別是在需要處理大量并發連接的應用場景中。
                  <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>

                              哎呀哎呀视频在线观看