摘要:前言整理了一些關(guān)于相關(guān)的基礎(chǔ)。第一部分狀態(tài)行由協(xié)議版本號狀態(tài)碼狀態(tài)消息三部分組成。由單一的順序的執(zhí)行線程一個當(dāng)前狀態(tài)和一組相關(guān)的系統(tǒng)資源所描述的活動單元。
前言
整理了一些關(guān)于PHP相關(guān)的基礎(chǔ)。請大家隨意摘看。
通信協(xié)議網(wǎng)絡(luò)通信協(xié)議是一種網(wǎng)絡(luò)通用語言,為連接不同操作系統(tǒng)和不同硬件體系結(jié)構(gòu)的互聯(lián)網(wǎng)絡(luò)引提供通信支持,是一種網(wǎng)絡(luò)通用語言。應(yīng)用層
名稱 | 注釋 |
---|---|
HTTP | Hypertext Transfer Protocol 超文本傳輸協(xié)議,顯示網(wǎng)頁 |
DNS | Domain Name System 域名系統(tǒng) |
FTP | File Transfer Protocol 文件傳輸協(xié)議 |
SFTP | SSH File Transfer Protocol 安全文件傳送協(xié)議 |
SSH | Secure Shell |
名稱 | 注釋 |
---|---|
TCP | Transmission Control Protocol 三次握手傳輸協(xié)議 |
UDP |
名稱 | 注釋 |
---|---|
IP | Internet Protocol |
ICMP | Internet Control Message Protocol,主要用于路由發(fā)送錯誤報告 |
HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫。它的發(fā)展是萬維網(wǎng)協(xié)會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結(jié)果,(他們)最終發(fā)布了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天普遍使用的一個版本——HTTP 1.1。
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。它不僅保證計算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。
HTTP是一個應(yīng)用層協(xié)議,由請求和響應(yīng)構(gòu)成,是一個標(biāo)準(zhǔn)的客戶端服務(wù)器模型。HTTP是一個無狀態(tài)的協(xié)議。
在TCP/IP協(xié)議棧中的位置HTTP協(xié)議通常承載于TCP協(xié)議之上,有時也承載于TLS或SSL協(xié)議層之上,這個時候,就成了我們常說的HTTPS。如下圖所示
默認(rèn)HTTP的端口號為80,HTTPS的端口號為443。
HTTP的請求響應(yīng)模型HTTP協(xié)議永遠(yuǎn)都是客戶端發(fā)起請求,服務(wù)器回送響應(yīng)。見下圖
這樣就限制了使用HTTP協(xié)議,無法實現(xiàn)在客戶端沒有發(fā)起請求的時候,服務(wù)器將消息推送給客戶端。
HTTP協(xié)議是一個無狀態(tài)的協(xié)議,同一個客戶端的這次請求和上次請求是沒有對應(yīng)關(guān)系。
客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息包括以下格式
請求行(request line)
請求頭部(header)
空行和請求數(shù)據(jù)四個部分組成。
Get請求例子
GET /562f25980001b1b106000338.jpg HTTP/1.1Host img.mukewang.comUser-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36Accept image/webp,image/*,*/*;q=0.8Referer http://www.imooc.com/Accept-Encoding gzip, deflate, sdchAccept-Language zh-CN,zh;q=0.8
POST請求例子
POST / HTTP1.1Host:www.wrox.comUser-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)Content-Type:application/x-www-form-urlencodedContent-Length:40Connection: Keep-Alivename=Professional%20Ajax&publisher=Wiley
第一部分:請求行,第一行顯示請求類型,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請求數(shù)據(jù),第八行。
一般情況下,服務(wù)器接收并處理客戶端發(fā)過來的請求后會返回一個HTTP的響應(yīng)消息。
HTTP響應(yīng)也由四個部分組成
狀態(tài)行
消息報頭
空行和響應(yīng)正文。
HTTP/1.1 200 OKDate: Fri, 22 May 2009 06:07:21 GMTContent-Type: text/html; charset=UTF-8
第一部分狀態(tài)行 : 由HTTP協(xié)議版本號、狀態(tài)碼、狀態(tài)消息三部分組成。
第二部分消息報頭 : 用來說明客戶端要使用的一些附加信息
第三部分空行 : 消息報頭后面的空行是必須的
第四部分響應(yīng)正文 : 服務(wù)器返回給客戶端的文本信息。
狀態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應(yīng)的類別,共分五種類別
狀態(tài) | 注釋 |
---|---|
1xx | 指示信息--表示請求已接收,繼續(xù)處理 |
2xx | 成功--表示請求已被成功接收、理解、接受 |
3xx | 重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作 |
4xx | 客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn) |
5xx | 服務(wù)器端錯誤--服務(wù)器未能實現(xiàn)合法的請求 |
進(jìn)程的概念是操作系統(tǒng)的結(jié)構(gòu)的基礎(chǔ)。Multics的設(shè)計者在20世紀(jì)60年代首次使用了這個技術(shù)詞語,它比作業(yè)更通用一些。關(guān)于進(jìn)程的定義,如下所示
一個正在執(zhí)行的程序。
計算機(jī)中正在運(yùn)行的程序的一個實例。
可以分配給處理器并由處理器執(zhí)行的一個實體。
由單一的順序的執(zhí)行線程、一個當(dāng)前狀態(tài)和一組相關(guān)的系統(tǒng)資源所描述的活動單元。
為什么設(shè)計了進(jìn)程?設(shè)計出一個能夠協(xié)調(diào)各種不同活動的系統(tǒng)軟件是非常困難的。
在任何時刻都有許多作業(yè)在運(yùn)行中,每個作業(yè)都包括要求按照順序執(zhí)行的很多步驟,因此分析時間的序列組合是不可的。由于缺乏能夠在所有活動中進(jìn)行協(xié)調(diào)和合作的系統(tǒng)級的方法,程序員只能基于他們對操作系統(tǒng)所控制的環(huán)境的理解,采用自己的特殊方法。然而這種方法是很脆弱的,尤其對于一些程序設(shè)計中的小錯誤,因為這些錯誤只有在很少見的時間序列發(fā)生時才會出現(xiàn)。
由于需要從應(yīng)用程序軟件錯誤和硬件錯誤中區(qū)分出這些錯誤,因而診斷工作是很困難的。及時檢測出錯誤,也很難確定原因,因為很難在線錯誤產(chǎn)生的精確場景。一般而言,產(chǎn)生這類錯誤的4個主要原因如下:
不正確同步
失敗互斥。
不確定的程序操作
死鎖
解決這些問題需要一種系統(tǒng)級別的方法監(jiān)控處理器中不同程序的執(zhí)行。進(jìn)程的概念為此提供了基礎(chǔ)。
因此進(jìn)程可以看做是由三部分組成的
一段可以執(zhí)行的程序
程序所需要的相關(guān)數(shù)據(jù)
程序的執(zhí)行上下文
進(jìn)程的創(chuàng)建傳統(tǒng)地,操作系統(tǒng)創(chuàng)建進(jìn)程的方式對用戶和應(yīng)用程序都是透明的,這在當(dāng)代操作系統(tǒng)中也很普遍。但是允許一個進(jìn)程引發(fā)另一個進(jìn)程的創(chuàng)建將是很有用的。
例如一個程序進(jìn)程可以產(chǎn)生另一個進(jìn)程,以接受應(yīng)用程序產(chǎn)生的數(shù)據(jù),并將數(shù)據(jù)組織成適合以后分析的格式。新進(jìn)程與應(yīng)用程序并行的運(yùn)行,并當(dāng)?shù)玫叫碌臄?shù)據(jù)時被激活。
這個方案對于構(gòu)造應(yīng)用程序是非常有用的,例如,服務(wù)器進(jìn)程(如打印服務(wù)器、文件服務(wù)器)可以為它處理的每個請求產(chǎn)生一個新進(jìn)程。當(dāng)操作系統(tǒng)為另一個進(jìn)程的顯式請求產(chǎn)生一個新進(jìn)程時,這個動作稱為進(jìn)程派生。
當(dāng)一個進(jìn)程派生另一個進(jìn)程時,前一個稱作父進(jìn)程,被派生的進(jìn)程稱作子進(jìn)程。在典型的情況下,相關(guān)進(jìn)程需要像話之間通信和合作。對程序員來說,合作是一個非常困難的任務(wù)。
什么是線程線程是進(jìn)程的一個執(zhí)行流,線程不能分配系統(tǒng)資源,它是進(jìn)程的一部分,比進(jìn)程更小的獨(dú)立運(yùn)行的單位進(jìn)程和線程的關(guān)系
進(jìn)程就像地主,有土地(系統(tǒng)資源),線程就像佃戶(線程,執(zhí)行種地流程)。每個地主(進(jìn)程)只要有一個干活的佃戶(線程)。
進(jìn)程-資源分配的最小單位,相對健壯,崩潰一般不影響其他進(jìn)程,但是切換進(jìn)程時耗費(fèi)資源,效率差些。
線程-程序執(zhí)行的最小單位,沒有獨(dú)立的地址空間,一個線程死掉可能整個進(jìn)程就死掉,但是節(jié)省資源,切換效率高。
PHP常見的進(jìn)程和線程在web應(yīng)用中,我們每次訪問php,就建立一個PHP進(jìn)程,當(dāng)然也會建立至少一個PHP線程
PHP使用pcntl來進(jìn)行多進(jìn)程編程
PHP中使用pthreads來進(jìn)行多線程編程
nginx的每個進(jìn)程只有一個線程,每個線程可以處理多個客戶端的訪問
php-fpm使用多進(jìn)程模型,每個進(jìn)程只有一個線程,每個線程只能處理一個客戶端訪問
apache可能使用多進(jìn)程模型,也可能使用多線程模型,取決于使用哪種SAPI
致謝感謝你看到這里,有時一些底層的知識會對日常開發(fā)起到很大的作用,去理解它,并非徹底了解它。有什么問題可在評論區(qū)留言,謝謝
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29226.html
摘要:轉(zhuǎn)換特殊字符為實體預(yù)定義的字符是和號成為雙引號成為單引號成為小于成為大于成為默認(rèn)為常量名描述轉(zhuǎn)換雙引號,不轉(zhuǎn)換單引號。 1.htmlspecialchars($string, $flag) (Convert special characters to HTML entities 轉(zhuǎn)換特殊字符為HTML實體) 預(yù)定義的字符是: & (和號)成為 & (雙引號)成為 (單引號)成為 ...
摘要:如何實現(xiàn)持久化持久化,將在內(nèi)存中的的狀態(tài)保存到硬盤中,相當(dāng)于備份數(shù)據(jù)庫狀態(tài)持久化,持久化是通過保存服務(wù)器鎖執(zhí)行的寫狀態(tài)來記錄數(shù)據(jù)庫的。 showImg(https://segmentfault.com/img/bVbejmD?w=643&h=404); 這是我整理的一套面試題,老鐵們看看就當(dāng)復(fù)習(xí)了哦 概述 感覺現(xiàn)在發(fā)面試題有些冷門,就跟昨天德國那場似的,不過看看當(dāng)提前復(fù)習(xí)了。提前備戰(zhàn)。...
摘要:而使用預(yù)處理器,提供缺失的樣式層復(fù)用機(jī)制減少冗余代碼,提高樣式代碼的可維護(hù)性。所以我們在實際項目中衡量預(yù)編譯方案時,還是得想想,比起帶來的額外維護(hù)開銷,預(yù)處理器有沒有解決更大的麻煩。也是成熟的預(yù)處理器之一,而且有一個穩(wěn)定,強(qiáng)大的團(tuán)隊在維護(hù)。 這篇文章主要解答以下幾個問題,供前端開發(fā)者的新手參考。 1、什么是Sass和Less? 2、為什么要使用CSS預(yù)處理器? 3、Sass和Less的...
摘要:而使用預(yù)處理器,提供缺失的樣式層復(fù)用機(jī)制減少冗余代碼,提高樣式代碼的可維護(hù)性。所以我們在實際項目中衡量預(yù)編譯方案時,還是得想想,比起帶來的額外維護(hù)開銷,預(yù)處理器有沒有解決更大的麻煩。也是成熟的預(yù)處理器之一,而且有一個穩(wěn)定,強(qiáng)大的團(tuán)隊在維護(hù)。 這篇文章主要解答以下幾個問題,供前端開發(fā)者的新手參考。 1、什么是Sass和Less? 2、為什么要使用CSS預(yù)處理器? 3、Sass和Less的...
摘要:模式,單實例多進(jìn)程,常用于多語言混編,比如等,不支持端口復(fù)用,需要自己做應(yīng)用的端口分配和負(fù)載均衡的子進(jìn)程業(yè)務(wù)代碼。就是我們需要一個調(diào)度者,保證所有后端服務(wù)器都將性能充分發(fā)揮,從而保持服務(wù)器集群的整體性能最優(yōu),這就是負(fù)載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
閱讀 1663·2021-09-23 11:31
閱讀 955·2021-09-23 11:22
閱讀 1390·2021-09-22 15:41
閱讀 4115·2021-09-03 10:28
閱讀 2943·2019-08-30 15:55
閱讀 3571·2019-08-30 15:55
閱讀 2006·2019-08-30 15:44
閱讀 2743·2019-08-30 13:50