網頁小型服務初步

2021-10-25 10:46:39 字數 3387 閱讀 1550

1、設定埠

2、程序執行目錄

3、start()

利用epoll多路i/o復用

一般而言,由硬體產生的訊號需要 cpu 立馬做出回應,不然資料可能就丟失了,所以它的優先順序很高。

cpu 理應中斷掉正在執行的程式,去做出響應;當 cpu 完成對硬體的響應後,再重新執行使用者程式。

它和函式呼叫差不多,只不過函式呼叫是事先定好位置,而中斷的位置由「訊號」決定。

中斷程式呼叫

以鍵盤為例,當使用者按下鍵盤某個按鍵時,鍵盤會給 cpu 的中斷引腳發出乙個高電平,cpu 能夠捕獲這個訊號,然後執行鍵盤中斷程式。

程序阻塞為什麼不占用 cpu 資源?

跑題了:

通過乙個輪詢處理i/o事件

void

*epoll_run

(int port)

// 建立lfd,並新增至監聽樹

int lfd =

init_listen_fd

(port, epfd)

;while(1

)for

(i=0

; i++i)

if(pev->data.fd == lfd)

else}}

}

void

do_read

(int cfd,

int epfd)

;int ret, n;

ret =

get_line

(cfd, line,

sizeof

(line));

if(ret ==0)

else

; n =

get_line

(cfd, buf,

sizeof

(buf));

if(n ==-1

)break;if

(buf[0]

=='\n'

)break;}

}// 判斷http協議頭,拆分 方法、檔名、協議號 -- "get /hello.c http/1.1"if(

strncasecmp

("get"

, line,3)

==0), path[

256]

=, protocol[16]

=;sscanf

(line,

"%[^ ] %[^ ] %[^ ]"

, method, path, protocol)

;// 處理 瀏覽器請求檔案

// 判斷檔案型別 --- 普通檔案。

if (s_isreg(sbuf.st_mode))

}

回發

// printf("寫回的http應答:|\n%s|\n", buf);

// 將組織好的 http 應答頭,傳送給瀏覽器

int ret =

send

(cfd, buf,

strlen

(buf),0

);if(ret ==-1

)}傳送檔案內容

void

send_file

(int cfd,

const

char

*file)

;int fd =

open

(file, o_rdonly);if

(fd ==-1

)// 迴圈從,本地檔案讀取資料,寫入套接字給瀏覽器

while

((n =

read

(fd, buf,

sizeof

(buf)))

>0)

close

(fd)

;}

void

do_accept

(int lfd,

int epfd)

// 列印客戶端ip+port

char client_ip[64]

=;printf

("new client ip: %s, port: %d, cfd = %d\n"

,inet_ntop

(af_inet,

&clt_addr.sin_addr.s_addr, client_ip,

sizeof

(client_ip)),

ntohs

(clt_addr.sin_port)

, cfd)

;// 設定 cfd 非阻塞

int flag =

fcntl

(cfd, f_getfl)

; flag |

= o_nonblock;

fcntl

(cfd, f_setfl, flag)

;// 將新節點cfd 掛到 epoll 監聽樹上

struct epoll_event ev;

ev.data.fd = cfd;

// 邊沿非阻塞模式

ev.events = epollin | epollet;

int ret =

epoll_ctl

(epfd, epoll_ctl_add, cfd,

&ev);if

(ret ==-1

)}

網頁樣式 DIV CSS初步

行內樣式 不推薦使用 內部樣式 寫在之間 外部樣式 連線式 先載入樣式表,收載入頁面 匯入式 一 基本選擇器 標籤選擇器 類選擇器 類名 id選擇器 id 二 符合選擇器 並集選擇器 用,隔開 交集選擇器 什麼都不用 後代選擇器 用空格隔開 一 劃分的大的區域一般用id選擇器 header main...

小型伺服器

在cmd或者shell中啟動python自帶的http伺服器 python m httpserver 80 指定80埠正常啟動會看到如下輸出 serving http on 0.0.0.0 port 8000 說明http伺服器啟動成功,預設埠是8000 在瀏覽器輸入,http 可以省略 或者 ht...

搭建小型郵件伺服器

公司用的exchange郵件伺服器,最近公升級內外網郵件分離。在使用outlook鏈結exchange server的時候,只能收到公司內部之間的郵件。而jira的伺服器配置的傳送郵箱的伺服器是外網的。於是申請了公司內部郵箱賬號來傳送jira郵件,無奈公司的exchange server要求使用nt...