一、libevent安裝教程
libevent是一個開源的事件通知庫,可以簡化網絡應用程序的開發,實現高並發和高性能。該庫支持多種操作系統,如Linux、FreeBSD、OpenBSD、Solaris等。下面詳細介紹libevent的安裝過程。
(1)下載libevent:從官網(http://libevent.org/)下載libevent的源碼,下載完成後解壓。
(2)進入解壓後的目錄進行配置:在終端中輸入如下命令:
./configure --prefix=/usr/local/libevent
其中,『–prefix』參數指定了libevent的安裝路徑。
(3)編譯:在終端中輸入『make』命令進行編譯。
make
(4)安裝:在終端中輸入『make install』命令進行安裝。
make install
(5)配置環境變量:在終端中輸入如下命令配置環境變量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib
至此,libevent的安裝過程完成。
二、libevent安裝執行不了make命令
在進行libevent安裝的過程中,有時會遇到執行『make』命令時無法正常執行的情況。這可能是因為系統缺少了必要的編譯工具和庫文件,可以通過以下步驟進行解決。
(1)安裝編譯工具和庫文件:
sudo apt-get install build-essential autoconf automake libtool
(2)重新編譯:
make clean && ./configure && make && make install
(3)如果上述方法無效,可以嘗試執行如下命令:
sudo apt-get install libssl-dev
三、libevent安裝流程
libevent的安裝流程一般分為四個步驟:下載、配置、編譯和安裝。具體流程請參考
一、libevent安裝教程
。
四、libevent安裝see also
在使用libevent時,還需要用到相關的庫文件。常用的庫文件有:
(1)libevent_core:該庫包含事件驅動的核心,提供了基於事件的網絡編程框架。
(2)libevent_extra:該庫提供了常用的額外功能,如DNS異步解析、HTTP客戶端和服務器等。
(3)libevent_pthreads:該庫提供了多線程支持。
五、libevent安裝以及卸載
libevent的安裝和卸載非常簡單,只需執行以下命令即可:
(1)安裝:
./configure --prefix=/usr/local/libevent
make && make install
(2)卸載:
make uninstall
六、libevent安裝 openssl1.1
在編譯某些程序時,需要使用到openssl1.1庫。以下是libevent安裝 openssl1.1的方法:
(1)下載openssl1.1庫:
https://www.openssl.org/source/openssl-1.1.1k.tar.gz
(2)解壓安裝:
tar zxvf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
./config --prefix=/usr/local --openssldir=/usr/local/openssl shared zlib-dynamic
make && make install
(3)編譯libevent時使用openssl1.1:
./configure --prefix=/usr/local/libevent --with-openssl=/usr/local
make && make install
七、libedit安裝
libedit是一個BSD授權的庫,提供了類似於readline的命令行編輯和提示功能,可用於開發命令行工具。以下是libevent安裝libedit的方法:
(1)下載libedit庫:
https://thrysoee.dk/editline/libedit-20191231-3.1.tar.gz
(2)解壓安裝:
tar zxvf libedit-20191231-3.1.tar.gz
cd libedit-20191231-3.1
./configure --prefix=/usr/local/libevent/
make && make install
(3)編譯libevent時使用libedit:
./configure --prefix=/usr/local/libevent --with-editline
make && make install
八、libevent udp
使用libevent進行UDP網絡編程,可以參考以下代碼:
int sockfd;
struct sockaddr_in servaddr, cliaddr;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9876);
bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
event_base *base = event_base_new();
struct event * ev_sockfd = event_new(base, sockfd, EV_READ | EV_PERSIST, udp_read_cb, (void*)base);
event_add(ev_sockfd, NULL);
event_base_dispatch(base);
其中,『udp_read_cb』為回調函數,用於讀取UDP數據報。
九、libevent 多線程
多線程是提高系統性能和處理更多請求的重要手段。libevent提供了多線程並發編程的支持。以下是使用libevent進行多線程編程的方法:
(1)初始化線程:
evthread_use_pthreads();
(2)創建事件:
struct event_base * base = event_base_new();
struct event * ev_listen = event_new(base, listenfd, EV_READ | EV_PERSIST, listen_cb, (void*)base);
event_add(ev_listen, NULL);
event_base_dispatch(base);
(3)創建線程池:
struct event_config * config = event_config_new();
event_config_set_num_threads(config, 4);
event_config_set_flag(config, EVENT_BASE_FLAG_FIXEDTHREADS);
struct event_base *base = event_base_new_with_config(config);
event_config_free(config);
(4)創建多線程事件:
struct event_base **bases = (struct event_base**) calloc(4, sizeof(void*));
int nthreads = 4;
for (int i = 0; i < nthreads; ++i) {
bases[i] = event_base_new();
if (!bases[i]) {
perror("event_base_new()");
exit(1);
}
}
struct event_config *config = event_config_new();
event_config_set_num_cpus_hint(config, nthreads);
event_base *base = event_base_new_with_config(config);
event_config_free(config)
struct event *p_signal_int = evsignal_new(base, SIGINT, signal_cb, (void*)event_self_cbarg());
struct event *p_signal_term = evsignal_new(base, SIGTERM, signal_cb, (void*)event_self_cbarg());
for (int i = 0; i < nthreads; ++i) {
struct event *ev_read = event_new(bases[i], fd, EV_READ | EV_PERSIST, read_cb, bases[i]);
event_add(ev_read, NULL);
}
十、libevent詳解
libevent是一個高效的事件通知庫,常用於網絡編程和異步編程。它提供了事件驅動的編程模式,採用基於回調函數的方式來處理事件,可以極大地提高程序的運行效率。libevent支持多種類型的事件,如網絡套接字、文件描述符、定時器等,在實際應用中具有廣泛的應用。
原創文章,作者:TVDR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144966.html