基於 epoll 實現 web 伺服器

2021-08-16 00:11:13 字數 1667 閱讀 4664

1. 簡介

epoll 是 linux 平台下特有的一種 i/o 復用模型實現,於 2002 年在 linux kernel 2.5.44 中被引入。在 epoll 之前,unix/linux 平台下的 i/o 復用模型包含 select 和 poll 兩個系統呼叫。隨著網際網路的發展,網際網路的使用者量越來越大,c10k 問題出現。基於 select 和 poll 編寫的網路服務已經不能滿足不能滿足使用者的需求了,業界迫切希望更高效的系統呼叫出現。在此背景下,freebsd 的 kqueue 和 linux 的 epoll 被研發了出來。kqueue 和 epoll 的出現,終結了 c10k 問題,c10k 問題就此作古。

2. 基於 epoll 實現 web 伺服器

在 linux 中,epoll 並不是乙個系統呼叫,而是 epoll_create、epoll_ctl 和 epoll_wait 三個系統呼叫的統稱。關於這三個系統呼叫的細節,這裡就不說明了,大家可以自己去查 man-page。接下來,我們來直接看乙個例子,這個例子基於 epoll 和 tinyhttpd 實現了乙個 i/o 復用版的 http server。在上**前,我們先來演示這個玩具版 http server 的效果。

上面就是玩具版 http server 的執行效果了,看起來還行。在我第一次把它成功跑起來的時候,感覺很奇妙。好了,看完效果,接下來看**吧,如下:

// 根據 cpu 數量建立子程序,為了演示「驚群現象」,這裡多建立一些子程序

for (int i = 0; i < cpu_www.douniu828.com core_num * 2; i++)

}while (1)

return 0;

}void process(int listen_fd)

while(1) {

// 等待事件發生

ready_fd_num = epoll_wait(epoll_fd, events, max_event_num, inftim);

printf("[pid %d]

基於epoll的web伺服器

我們在大量併發的時候epoll有高的效能,所以我們選擇用他去做乙個bs模型的web伺服器 web伺服器 網路上是epoll併發,在解析http命令是下面的思路 具體的主要看 的思路 去除前面的 int n1 0 char pname name if strlen pname 1 else 通過對字元...

基於epoll實現簡單的web伺服器

epoll 是 linux 平台下特有的一種 i o 復用模型實現,於 2002 年在 linux kernel 2.5.44 中被引入。在 epoll 之前,unix linux 平台下的 i o 復用模型包含 select 和 poll 兩個系統呼叫。隨著網際網路的發展,網際網路的使用者量越來越...

基於epoll實現簡單的web伺服器

epoll 是 linux 平台下特有的一種 i o 復用模型實現,於 2002 年在 linux kernel 2.5.44 中被引入。在 epoll 之前,unix linux 平台下的 i o 復用模型包含 select 和 poll 兩個系統呼叫。隨著網際網路的發展,網際網路的使用者量越來越...