18 webserv 流socket的應用

2021-10-09 17:51:03 字數 1694 閱讀 8525

1、伺服器設計

學習了網路程式設計的基本操作和設計原則,建立乙個web伺服器,這是乙個典型的socket流的客戶端/伺服器系統。伺服器設立服務,然後進入迴圈接收和處理請求。客戶端連線到伺服器,然後傳送、接收或者交換資料,最後退出。該互動過程主要包含3個操作:

2、建立伺服器socket

設立乙個服務一般需要3個步驟:

3、建立客戶端socket

基於流的網路客戶連線到伺服器需要2個步驟:

4、伺服器的設計問題——自己做或**

伺服器有兩種設計方法,一種是自己做(diy)伺服器接收請求自己處理工作,另一種是**也就是伺服器接收請求然後建立乙個新程序來處理工作。

使用fork和exec來執行date至少需要3個系統呼叫和建立乙個新程序,對於一些伺服器,效率最高的方法是伺服器自己來完成工作並且在listen中限制連線佇列的大小

伺服器處理耗時的任務或等待資源時,需要**來完成其工作,伺服器使用fork建立乙個新程序來處理每個請求,通過這種方式,伺服器可以同時處理多個任務。

當子程序退出或被終止時,核心傳送sigchld給父程序,父程序可以為sigchld設定乙個訊號處理函式,它可以呼叫wait,子程序從程序表中被刪除,父程序從處理函式返回到主函式。

5、編寫web伺服器

web伺服器通常具備的3種使用者操作:

webserv.c

web伺服器端程式

#include#include#include#include#include#include#include#include#include#include#include#define hostlen 256

#define backlog 1

#define oops(msg)

int make_server_socket_q(int portnum,int backlog)

int make_server_socket(int portnum)

void header(file *fp,char *content_type)

void cannot_do(int fd)

bool not_exist(char *f)

void do_404(char *item,int fd)

bool isadir(char *f)

void do_ls(char *dir,int fd)

//得到檔案字尾名

char *file_type(char *f)

bool ends_in_cgi(char *f)

void do_exec(char *prog,int fd)

void do_cat(char *f,int fd)

exit(0);

}void process_rq(char *rq,int fd)

int main(int argc,char *ar**)

return 0;

}

webclnt.c

web客戶端

#include#include#include#include#include#include#include#include#define oops(msg) 

int connect_to_server(char *host,int portnum)

int main(int argc,char *ar**)

Airflow 1 8 工作流平台搭建

airflow 是airbnb公司開源的,是用 python 實現的任務管理 排程 監控工作流的平台。因依排程賴於 crontab airflow 目前只支援在安裝在 linux 系統平台。airflow 可以用做 data pipeline etl 訊息佇列等監控。mysql資料庫安裝 將作為元資...

網路流 24 題 18 航空路線問題

特判與本地能過但是交上去就不對 同樣是等會兒一塊寫吧。題意有n個城市,一些城市之間兩兩存在邊。要求從城市1出發走到城市n然後再從城市n走到城市1。要求經過的城市形成乙個單調遞增 單調遞減序列。求這最長的序列並且輸出。分析首先考慮轉化問題變成從1走到n兩次。然後求最大費用最大流。通過判斷是否滿流來判斷...

Airflow 1 8 工作流平台搭建

airflow 是airbnb公司開源的,是用 python 實現的任務管理 排程 監控工作流的平台。因依排程賴於 crontab airflow 目前只支援在安裝在 linux 系統平台。airflow 可以用做 data pipeline etl 訊息佇列等監控。mysql資料庫安裝 將作為元資...