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資料庫安裝 將作為元資...