天天看點

基于Libevent的HTTP Server

簡單的http server

使用libevent内置的http相關接口,可以很容易的建構一個http server,一個簡單的http server如下:

基于Libevent的HTTP Server
基于Libevent的HTTP Server

通過libevent的接口建構一個http server的過程如下:

(1)初始化:在event_base上建立一個evhttp,将這個evhttp綁定到監聽的ip和端口号。

(2)設定http回調函數:使用evhttp_set_gencb設定http server的處理請求的回調函數。

(3)啟動http server:等待請求進入事件循環。

在http server中使用定時器提供更新服務

基于Libevent的HTTP Server
基于Libevent的HTTP Server

在這個http server中提供了一個每5秒觸發一次的定時器,讀取一個檔案,如果這個檔案被更新過,則讀取更新後的内容。

當通路這個http server時,提供這個檔案中最新的内容。

多線程的http server

在上面的http server中,處理http請求的回調函數generic_handler和定時器讀取檔案的回調函數read_file_timer_cb都在同一個event_base的dispatch中,并且都在同一個程序中,使用多線程可以改善程式的性能,下面是一個來自網絡的多線程http server:

基于Libevent的HTTP Server
基于Libevent的HTTP Server

上面的代碼基于libevent 1.x版本的,不過很容易很看懂:在一個監聽socket上建立了多個event_base執行個體和evhttp執行個體,在不同的線程中排程不同的event_base,繼而可以在不同的線程中處理http請求。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。