基於epoll的web伺服器

2021-10-13 09:43:15 字數 4072 閱讀 3968

我們在大量併發的時候epoll有高的效能,所以我們選擇用他去做乙個bs模型的web伺服器

web伺服器

網路上是epoll併發,在解析http命令是下面的思路

具體的主要看**的思路

;//去除前面的「/」

int n1=0;

char

*pname=name;if(

strlen

(pname)

<=1)

else

//通過對字元的轉換來處理中文編碼問題

strdecode

(pname, pname)

;printf

("[%s]\n"

, pname)

;//將快取區其他的請求行 空行 正文清空

while

((n1=

readline

(connfd,buf,

sizeof

(buf)))

>0)

;//判斷檔案是否存在

struct stat st;if(

stat

(pname,

&st)

<0)

else

elseif(

s_isdir

(st.st_mode)

)else

else

free

(namelist[num]);

write

(connfd,buffer,

strlen

(buffer)+1

);}free

(namelist);}

//傳送尾

send_file

(connfd,

"html/dir_tail.html");

}}}int

main

(int argc,

char

*ar**)

; sprintf (path,

"%s/%s"

,getenv

("home"),

"xixi/w_網路/http");

chdir (path)

;//建立網路描述符

int sfd=

socket

(af_inet,sock_stream,0)

;if(sfd<0)

//設定埠復用

int opt=1;

setsockopt

(sfd,sol_socket,so_reuseaddr,

&opt,

sizeof

(opt));

//初始化包含應用層和網路層的ip結構體

struct sockaddr_in ip,ipp;

ip.sin_family =af_inet;

ip.sin_port =

htons

(10034);

ip.sin_addr.s_addr =

inet_addr

("0.0.0.0");

=inet_addr("172.26.46.72");

socklen_t len =

sizeof

(ip)

;//繫結if(

bind

(sfd,

(struct sockaddr*

)&ip,len)

)//監聽if(

listen

(sfd,

155)

)//epoll跟結點的建立

int epfd=epoll_create (

1000);

if(epfd <0)

struct epoll_event tep,ep[

1000];

int client[

1000

],ret,n,socked;

char buf[

100]

;int max=-1

,connfd,j,cfd;

char str[

100]

;//將接收到的客戶端初始化為-1

for(

int i=

0;i<

1000

;i++

)//將監聽的檔案描述符上樹

tep.events=epollin;

tep.data.fd=sfd;

int res=

epoll_ctl

(epfd,epoll_ctl_add,sfd,

&tep);if

(res==-1

)//迴圈監聽

while(1

)for

(int i=

0;iif(connfd ==

1000)if

(j >max)

max=j;

tep.events=epollin;

tep.data.fd= connfd;

ret=

epoll_ctl

(epfd,epoll_ctl_add,connfd,

&tep);if

(ret==-1

)}else}}

close (sfd)

; close (epfd)

;return0;

}

基於 epoll 實現 web 伺服器

1.簡介 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 兩個系統呼叫。隨著網際網路的發展,網際網路的使用者量越來越...

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

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