專案 高效能web伺服器

2021-08-25 14:42:52 字數 3031 閱讀 3092

reacotr模式本質上來講,他要求主線程(i/o處理單元)只負責監聽檔案描述符上是否有事件發生,有的話就立即將該事件通知工作執行緒(邏輯單元),除此之外,主線城不做任何其他實質性的工作。讀寫資料,接受新的連線,以及處理客戶請求均在工作執行緒中完成。

使用同步i/o模型(epoll_wait為例)實現的reactor模式工作流程:

當有事件發生時,會通知應用程式,若不處理資料或者沒處理完,下次呼叫epoll_wait時還會一直通知應用程式,直到事件被處理完。所以事件沒有處理完,會被重複觸發

ev.events = epollin;   //預設為lt模型
只有當資料到來時,才會觸發通知。乙個事件只通知一次,不管有沒有處理完安,後續不會在通知此事件。有新的事件到來時會通知;

et模型在很大的程度上降低了同乙個epoll事件被重複觸發的次數效率比lt模式的高。

ev.events = epollin | epollet; //事件觸發設定為邊緣觸發
et模型為什麼要使用非阻塞socket

- 上述說了,et乙個事件只會通知一次,如在唯讀事件中,若到來了100k資料,應用程式一次唯讀50k,那麼一次處理後在緩衝區裡還剩下50k,但該事件不會再通知,殘留資料永遠讀不到了。

- 所以應用程式必須手動地一次讀取完所有資料,可以用while迴圈讀取,但將緩衝區資料讀完時,程式無法知道緩衝區裡沒有資料了,會一直等資料到來,阻塞下去,所以應該用非阻塞方式讀取。

fcntl 設定檔案描述符的屬性

int fcntl(int fd, int cmd, …/arg/);

引數

- fd 設定屬性的檔案描述符

- cmd 何種操作

- f_getfl 獲取檔案狀態標識

- f_setfl 設定檔案狀態標識

- arg: o_nonblock 非阻塞屬性

void setnonblock(int fd) 

//迴圈讀取資料

int recv_data(int sockfd, char *buff, int len)

if (read_len < (len - total_len)) //讀取出來的資料沒有想要的資料長,說明是最後一次讀了

break;

total_len += read_len;

}total_len += read_len;

return total_len; //返回讀取的長度

}

epolloneshot 屬性:任一時刻,socket連線只能被乙個執行緒所處理

———–後補http請求報文=請求行+請求報頭+空行+請求正文

請求報頭

請求行:method+url+http協議版本

method請求方法

- get 獲取url的資源,該方法引數在url中,可以有可以沒有

- post 傳輸實體主體,該方法引數在請求正文中

-get與post的區別:get引數暴露在url中不安全

- put 傳輸檔案,將檔案放入指定路徑,類似ftp,存在安全問題

- head 獲得報頭首部

- delete 與put相反,刪除指定資源

- connect 使用隧道協議**

url:統一資源定位識別符號,一般又稱為**;

url構成:http協議型別,host+port(ip+埠號/網域名稱) ,path(檔案路徑,預設/會自動新增)請求引數(get方法有)

請求報頭content-length:表示請求正文的長度

請求報文類似:響應狀態+響應報頭+空行+響應正文

狀態碼http返回給瀏覽器狀態碼,表明狀態

2xx成功狀態碼

- 200 正常處理

- 204 正常處理,缺少響應正文

- 206 正常請求一部分

3xx成功狀態碼

- 301 永久性重定向 url失效,轉移至其他url

- 302 臨時性重定向

4xx客戶端錯誤

- 400 請求報頭中存在語法錯誤

- 403 請求被伺服器拒絕

-404找不到,伺服器上沒有請求資源

5xx伺服器端錯誤

- 500 伺服器在執行時出現bug或故障

- 503 伺服器處於超負載狀態

OpenResty安裝(高效能web伺服器)

openresty 參考資料 官方 github openresty最佳實踐 安裝openresty 預設安裝路徑如下 usr local openresty openresty,也被稱為 ngx openresty 是乙個基於 nginx 的核心web應用程式伺服器,它包含了大量的第三方的ngin...

Nginx高效能WEB伺服器詳解

與root 功能的差別 案例 3 正規表示式 regular expression 匹配location 字尾匹配 匹配任何字尾檔名gif jpg jpeg png css js ico m3u8 ts結尾的請求 ts 檔案匹配m3u8 檔案匹配nginx.conf 配置資訊location gif...

高效能web伺服器nginx簡介

nginx是乙個高效能的http和反向 伺服器軟體,是imap pop3 smtp 伺服器 1,nginx的組成和工作原理 nginx由核心和模組組成 核心 設計微小簡潔 工作,通縮查詢配置檔案將客戶端請求對映到乙個location block,location是nginx配置的乙個命令,用於url...