国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統(tǒng) > 正文

libevent入門(1)

2024-06-28 13:23:46
字體:
供稿:網(wǎng)友
libevent入門(1)libevent是什么 libevent 庫實際上沒有更換select()poll()或其他機制的基礎(chǔ)。而是使用對于每個平臺最高效的高性能解決方案在實現(xiàn)外加上一個包裝器。 為了實際處理每個請求,libevent 庫提供一種事件機制,它作為底層網(wǎng)絡(luò)后端的包裝器。事件系統(tǒng)讓為連接添加處理函數(shù)變得非常簡便,同時降低了底層 I/O 復雜性。這是 libevent 系統(tǒng)的核心。 通俗的說,libevent是select、poll、epoll等機制的一種封裝,使網(wǎng)絡(luò)編程更方便、減低網(wǎng)絡(luò)編程的復雜性。libevent有以下特點: 可移植性: 使用libevent庫編寫的程序可以運行在所有支持libevent的平臺,即時是在不支持非阻塞IO的平臺上,libevent庫也可以支持一般的IO工作方法。 高效: 使用libevent庫編寫的程序會使用每個平臺最高效的非阻塞IO模型,而不是引入過多的其他的IO機制。 伸縮性強: 使用libevent庫編寫的程序可以處理大量的網(wǎng)絡(luò)連接。 便捷性: libevent是對底層IO機制的封裝,可以編寫統(tǒng)一的程序,降低IO程序編寫的復雜性。怎么使用libevent libevent總體API調(diào)用過程如下: (1)event_base_new() //初始化一個event_base (2)event_set() //初始化一個event(事件)結(jié)構(gòu)體,設(shè)置事件的文件描述符、事件類型(讀IO事件或者寫IO事件等)、事件被觸發(fā)后的回調(diào)函數(shù)、回調(diào)函數(shù)的參數(shù) (3)event_base_set() //給事件設(shè)置相應(yīng)的event_base(4)event_add() //把事件添加到隊列(就緒隊列、active隊列等),隊列由event對應(yīng)的event_base管理(5)event_base_dispatch()//啟動輪詢 event_base和event是一對多的關(guān)系,一個event_base管理著多個event。
 1 int main()  2 {  3     4     int serFd;    5     struct sockaddr_in serAddr;  6                   7     memset(&serAddr, 0, sizeof(serAddr));    8     serAddr.sin_family = AF_INET;    9     serAddr.sin_addr.s_addr = inet_addr("127.0.0.1");     10     serAddr.sin_port = htons(8888);    11                                12        13     serFd = socket(AF_INET, SOCK_STREAM, 0);   14     bind(serFd, (struct sockaddr*)&serAddr, sizeof(serAddr));   15     listen(serFd, 10); 16    17     //初始化一個event_base18     base = event_base_new(); 19        20     struct event listenEvent; 21 22     //初始化一個event(事件)結(jié)構(gòu)體,設(shè)置事件的文件描述符、事件類型(讀IO事件或者寫IO事件等)、23     //事件被觸發(fā)后的回調(diào)函數(shù)onAccept【該函數(shù)需要我們自己實現(xiàn)】、回調(diào)函數(shù)的參數(shù)24     //EV_PERSIST表示事件的回調(diào)函數(shù)執(zhí)行完后,不會把事件listenEvent從base中移除25     event_set(&listenEvent, serFd, EV_READ|EV_PERSIST, onAccept, NULL); 26    27     //給listenEvent事件設(shè)置相應(yīng)的event_base28     event_base_set(base, &listenEvent); 29 30      //把事件添加到隊列(就緒隊列、active隊列等),隊列由event對應(yīng)的event_base管理31     event_add(&listenEvent, NULL); 32        33     //啟動輪詢34     event_base_dispatch(base); 35    36     return 0; 37 }

    回調(diào)函數(shù):

1 //回調(diào)函數(shù)包含三個參數(shù)2 //參數(shù)1:事件對應(yīng)的文件描述符3 //參數(shù)2:事件對應(yīng)的行為 EV_READ|EV_PERSIST4 //參數(shù)3:在event_set函數(shù)傳入的參數(shù)的指針5 void onAccept(int serFd, short iEvent, void *arg) 6 { 7     //listenEvent事件的回調(diào)函數(shù)8 } 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 行唐县| 井研县| 鲁甸县| 广宗县| 射洪县| 汉沽区| 皋兰县| 中江县| 涿鹿县| 资中县| 普定县| 伽师县| 城市| 镇坪县| 玛多县| 高平市| 峨眉山市| 论坛| 来宾市| 小金县| 崇左市| 久治县| 锦州市| 九龙县| 永平县| 彭泽县| 遵义市| 合水县| 定结县| 漾濞| 兴城市| 湾仔区| 景宁| 玉环县| 安徽省| 出国| 大宁县| 资兴市| 遂宁市| 龙门县| 措美县|