HTTP協議和Nginx

一、HTTP協議和Nginx

1.套接字Socket

套接字Socket是進程間通信IPC的一種實現,允許位于不同主機(或同一主機)上不同進程之間進行通信和數據交換,SocketAPI出現于1983年BSD4.2實現在建立通信連接的每一端,進程間的傳輸要有兩個標志:IP地址和端口號,合稱為套接字地址 socket address

1.客戶機套接字地址定義了一個唯一的客戶進程

2.服務器套接字地址定義了一個唯一的服務器進程

套接字的系統調用:

socket()創建一個套接字
bind()綁定IP和端口
listen()監聽
accept()接收請求
connect()請求連接建立
write()發送
read()接收
close()關閉連接

2.URI

URI(Uniform Resource Identifier ):統一資源標識,分為URL和URN

1.URL

URL是統一資源定位符,用于描述某服務器某特定資源位置

2.URN

URN是統一資源命名

3.URL和URN的區別

URN如同一個人的名稱,而URL代表一個人的住址。URN定義某事物的身份,而URL提供查找該事物的方法,URN僅用于命名而不指定地址

4.URL的組成

scheme方案,訪問服務器以獲取資源時要使用哪種協議
user用戶,某些方案訪問資源時需要的用戶名
password密碼,用戶對應的密碼,中間用:分隔
Host主機,資源宿主服務器的主機名或IP地址
port端口,資源宿主服務器正在監聽的端口號,很多方案有默認端口號
path路徑,服務器資源的本地名,由一個/將其與前面的URL組件分隔
params參數,指定輸入的參數,參數為名/值對,多個參數,用;分隔
query查詢,傳遞參數給程序,如數據庫,用?分隔,多個查詢用&分隔
frag片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔

3.請求訪問的完整過程

當用戶發起http請求 需要請求index.html網頁文件

客戶端請求和服務器端建立連接,建立連接后,客戶端發送請求報文

服務端網卡收到請求報文,將該報文復制到內核空間(操作系統),內核空間分析報文后交給對應的程序

nginx分析該報文,對比報文和自己的配置文件,按照配置文件完成請求,分析完成后,發現客戶需要index.html文件

由于程序的權限問題,沒有資格直接調用磁盤上的文件,程序會再將這個請求,再次轉發給內核

內核得到請求后,去磁盤中尋找目標文件,找到文件后,復制給程序
程序構建響應報文,構建好后交給內核空間

內核空間得到響應報文后,再交給網卡,發給客戶

二、I/O模型處理高并發的時候用

1.I/O模型

同步/異步(消息反饋機制):關注的是消息通信機制,即調用者在等待一件事情的處理結果時,被調用者是否提供完成狀態的通知

同步:synchronous,被調用者并不提供事件的處理結果相關的通知消息,需要調用者主動詢問事情是否處理完成

異步:asynchronous,被調用者通過狀態、通知或回調機制主動通知調用者被調用者的運行狀態

阻塞/非阻塞:關注調用者在等待結果返回之前所處的狀態

同步阻塞:nginx需要自己去問內核是否完成了我交代的任務,而且在接待了一個請求后只有等這個請求結束后才能繼續下一個請求

同步非阻塞:指IO操作被調用后立刻告訴內核是否完成了我交代的任務,無需等待IO操作徹底完成,在最終的結果返回前,調用者不會被掛起,可以去做別的事情

2.多路復用I/O型

多路復用I/O模型是一種基于事件驅動的 I/O 處理模式,它利用操作系統提供的多路復用機制(如select、poll、epoll等)來同時監聽多個 I/O 事件,當某個事件就緒時,通知應用程序進行處理,通過多路復用I/O模型,可以在一個線程中同時處理多個客戶端連接的 I/O 操作,而不需要為每個連接創建一個線程或進程,避免了資源開銷和上下文切換的成本。

常見的多路復用I/O模型有:

1.select:適用于連接數不太多的情況,輪詢監聽多個文件描述符上的 I/O 事件。
2.poll:與select類似,但沒有連接數的限制,并且不會修改傳入的描述符集合。
3.epoll:適用于連接數非常多的情況,通過事件驅動機制來處理 I/O 事件,可以在大并發情況下具有較高的性能優勢。

3.異步I/O模型

異步?I/O 模型是一種非阻塞的 I/O 處理模式,通過回調函數或事件通知的方式來處理已完成的 I/O 操作,能夠提高系統的并發性和處理效率

4.事件模型select poll epoll

1.Nginx服務使用異步非阻塞模式:請求不需要排隊,會反饋任務的完成結果

2.Apache服務使用同步阻塞模式:請求需要排隊,且不會主動返回結果

模型描述優點缺點
select最古老的模型可以同時監視多個文件描述符效率較低,不適用于大規模并發連接
poll類似于select效率相對更高,可以處理大量并發連接隨著文件描述符數量的增加,性能下降較明顯
epollLinux特有模型在高并發場景下性能表現更好,使用邊緣觸發方式,只在狀態變化時通知在非Linux系統上不可用,涉及到一些操作系統特定的細節和配置
模型區別selectpollepoll
操作方式遍歷遍歷回調
底層實現數組鏈表hash表
IO效率每次調用都進行線性遍歷,時間復雜度為0(n)每次調用都進行線性遍歷,時間復雜度為0(n)事件通知方式,每當fd就緒,系統注冊的回調函數就會被調用,將就緒的fd放到rdlllist里,時間復雜度O(1)
IO效率1024(x86)2048(x64)無上限無上限
fd拷貝每次調用select都需要把fd集合從用戶拷貝到內核態每次調用poll,都需要把fd集合從用戶態拷貝到內核態調用epoll ctl時拷貝進內核并保存,之后每次epoll wait不拷貝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36262.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

binlog與redolog的區別

binlog與redolog的區別 在數據庫管理系統中,日志系統扮演著至關重要的角色,它記錄了數據庫的所有更改,從而確保在發生故障時能夠恢復數據。其中,binlog(二進制日志)和redolog(重做日志&#xf…

Eureka是什么?它是如何工作的?

Eureka是Netflix開發的服務發現框架,現在是Spring Cloud生態系統的一部分。它主要用于AWS云平臺,用來定位服務,以實現中間層服務器的負載均衡和故障轉移。在微服務架構中,服務發現是關鍵的一環,它允許服務和服務彼此發…

理解MySQL核心技術:外鍵的概念、作用和應用實例

引言 在數據庫管理系統(DBMS)中,外鍵(Foreign Key)是維持數據一致性和實現數據完整性的重要工具。本文將詳細介紹MySQL外鍵的基本概念、作用,以及相關的操作指南和應用實例,幫助讀者掌握并靈活…

深入了解PHP的If...Else語句

PHP是目前最流行的服務器端編程語言之一,用于開發動態和交互式網站。在PHP編程中,控制結構是非常重要的概念,它們決定了代碼的執行流程。其中,if…else語句是最常用的控制結構之一。本文將深入介紹PHP中的if…else語句&#xff0c…

【Android】怎么創建一個隱藏圖標的應用

項目需求 創建一個不帶啟動圖標的app 項目實現 1.低版本上 在低版本的Android系統上面&#xff0c;可以簡單使用這個,但是現在很多版本都不適用了。 <activityandroid:name".MainActivity"><intent-filter><action android:name"android.int…

算子級血緣和血緣查詢管理

數據鏈路 血緣關系 應用場景&#xff1a;數據資產&#xff0c;數據開發&#xff0c;數據治理&#xff0c;數據安全等等 &#xff08;綠色箭頭上面是數據治理&#xff09; 場景&#xff1a; 數據鏈路的高效盤點與理解 數倉模型的長效優化機制 風險影響的及時全面分析 重復…

linux kswapd0進程cpu占用一直居高不下

kswapd0 是 Linux 內核中的一個進程&#xff0c;負責管理虛擬內存和交換&#xff08;swap&#xff09;操作。當該進程的 CPU 占用率居高不下時&#xff0c;通常表示系統正在頻繁地進行交換操作&#xff0c;可能由于內存不足或內存使用不合理。 可能原因 內存不足&#xff1a; …

Android Studio無法正確引入包內存在的類

Android Studio 無法識別同一個 package 里的類&#xff0c;顯示為紅色&#xff0c;但是 compile 沒有問題。 重啟&#xff0c;rebuild,clean都沒有用。 多半是因為 Android Studio 之前發生了錯誤&#xff0c;某些 setting 出了問題。 解決方法如下&#xff1a; 點擊菜單中的…

6月27日-四象限法則

四象限法則&#xff0c;又稱為艾森豪威爾矩陣&#xff08;Eisenhower Matrix&#xff09;&#xff0c;是一種時間管理和任務優先級排序的方法。它將任務分為四個象限&#xff0c;幫助個人識別哪些任務最重要&#xff0c;哪些可以推遲或委托&#xff0c;以及哪些可以完全忽略。以…

【等保2.0超詳細解讀,收藏這一篇就夠了!】

網絡安全等級保護是指對國家、法人、其他組織、個人的重要信息&#xff0c;對信息的存儲、傳輸、處理等過程進行的保障。分級保護的基本思路是“分級、按標準、結合技術和管理”&#xff0c;用安全保護和監測預警的方法&#xff0c;對潛在的安全風險進行檢測和處理&#xff0c;…

在Vue中v-if如何使用

v-if 是 Vue.js 中的一個指令&#xff0c;用于根據表達式的真假值來有條件地渲染一個元素。當表達式為真值時&#xff0c;元素會被渲染&#xff1b;當表達式為假值時&#xff0c;元素及其子元素不會被渲染。 基本使用 在 Vue 的模板中&#xff0c;你可以使用 v-if 來控制元素…

Spring中的InitializingBean接口

使用方法 Slf4j Component public class MyBean implements InitializingBean {public MyBean() {log.info("> 構造方法");}Overridepublic void afterPropertiesSet() throws Exception {log.info("> afterPropertiesSet方法");} }Spring中的Bean注…

Python基礎之模塊和包講解

文章目錄 1 模塊和包1.1 模塊和包1.1.1 模塊1.1.2 包1.1.3 簡單使用 1.2 import 語句1.2.1 import1.2.2 from … import 語句1.2.3 from … import * 語句 1.4 深入模塊1.4.1 模塊符號表1.4.2 __name__屬性1.4.3 dir() 函數1.4.4 作用域 1.5 常用內置模塊1.5.1 collections1.5.…

生命在于學習——Python人工智能原理(2.4.2)

四、Python的程序結構與函數 4.4 函數 函數能將代碼劃分為若干模塊&#xff0c;每一個模塊可以相對獨立的實現某一個功能&#xff0c;函數有兩個主要功能&#xff0c;分別是降低編程難度和實現代碼復用&#xff0c;函數是一種功能抽象&#xff0c;復用它可以將一個復雜的大問…

使用函數open()的例子

代碼&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd-1;char filename[]"test.txt";fdopen(filename,O_RDWR);if(-1fd){printf("Open file %s failure!,fd…

PyCharm左側項目區域出現淡黃色背景如何解決

PyCharm左側項目區域出現淡黃色背景如何解決 解決方法&#xff1a; 1、打開pycharm 文件 - > Setting-> 項目 -> 項目結構 2、添加內容根 為 你的項目根目錄即可恢復

Linux 相對路徑轉化為絕對路徑 C語言 (realpath函數)

功能簡述&#xff1a; 將路徑轉為絕對路徑。函數原型&#xff1a; char * realpath (const char *restrict name, char *restrict resolved) ○ name&#xff1a;原始路徑。 ○ resolved&#xff1a;存放規范化路徑的地址。可以為 null。 ○ 返回值&#xff1a;正常情況和resol…

什么是港股通?港股通碎股如何進行交易傭金最低萬0.8?

港股通是一種投資渠道&#xff0c;它允許符合條件的內地投資者通過內地的證券賬戶&#xff0c;間接地買賣在香港聯合交易所上市的股票。這一機制是滬港通和深港通計劃的一部分&#xff0c;旨在促進內地與香港資本市場的互聯互通。 ### 港股通的特點包括&#xff1a; - 交易范…

無痛接入FastText算法進行文本分類(附代碼)

AI應用開發相關目錄 本專欄包括AI應用開發相關內容分享&#xff0c;包括不限于AI算法部署實施細節、AI應用后端分析服務相關概念及開發技巧、AI應用后端應用服務相關概念及開發技巧、AI應用前端實現路徑及開發技巧 適用于具備一定算法及Python使用基礎的人群 AI應用開發流程概…

API-其他事件

學習目標&#xff1a; 掌握其他事件 學習內容&#xff1a; 頁面加載事件元素滾動事件頁面尺寸事件 頁面加載事件&#xff1a; 加載外部資源&#xff08;如圖片、外聯CSS和JavaScript等&#xff09;加載完畢時觸發的事件。 為什么要學&#xff1f;&#xff1f; 有些時候需要等…