使用PHP編寫HTTP服務(wù)器
來源:原創(chuàng) 時(shí)間:2018-01-25 瀏覽:0 次PHP開端作為一個(gè)專門為Web開發(fā)量身定制的言語,自身供給了底層的語法、函數(shù)和機(jī)制讓咱們具有了超高的Web開發(fā)功率,運(yùn)用PHP就相當(dāng)于運(yùn)用其他言語附加上了一個(gè)Web結(jié)構(gòu)。咱們具有十分好用的$_GET, $_POST超大局?jǐn)?shù)組,以及十分令人省心的單進(jìn)程模型:每次懇求對應(yīng)一個(gè)進(jìn)程,讓咱們無需理睬線程安全、細(xì)小的內(nèi)存走漏和資源的整理。可是這些長處像咱們屏蔽了一些底層的細(xì)節(jié)。追根溯源,回到Web開發(fā)的源頭,運(yùn)用PHP完成一個(gè)HTTP效勞器而且運(yùn)轉(zhuǎn)PHP事務(wù)代碼,應(yīng)該是一件很風(fēng)趣的作業(yè), 這有助于咱們了解HTTP協(xié)議和HTTP效勞器的作業(yè)原理,以及HTTP效勞器是怎樣與PHP合作作業(yè)。在這篇文章中我將會介紹怎么用PHP完成一個(gè)能夠運(yùn)轉(zhuǎn)內(nèi)置Web結(jié)構(gòu)的HTTP效勞器。先從怎么完成一個(gè)Socket效勞器接納網(wǎng)絡(luò)懇求開端, 探求怎么解析HTTP協(xié)議,處理HTTP懇求和回來呼應(yīng)。接下來結(jié)合多進(jìn)程拓寬完成一個(gè)多進(jìn)程的效勞模型, 再結(jié)合Libevent完成一個(gè)事情驅(qū)動的非堵塞網(wǎng)絡(luò)調(diào)用。為了約束懇求的數(shù)量,完成對資源的合理分配和運(yùn)用,咱們會樹立一個(gè)作業(yè)的進(jìn)程池來處理懇求行列。最終我會運(yùn)用Symfony/Console編寫一個(gè)命令行程序和看護(hù)進(jìn)程用來辦理HTTP Server。
需求留意的是這個(gè)項(xiàng)目只是作為PHP Web結(jié)構(gòu)的容器效勞器。為了簡化開發(fā),這個(gè)效勞器不會支撐完好的HTTP協(xié)議,所以會運(yùn)用Nginx作為反向代理效勞器來支撐完好的HTTP協(xié)議。
一個(gè)簡略的Socket Server (套接字效勞器)
解析HTTP協(xié)議
根據(jù)Pcntl拓寬的多進(jìn)程作業(yè)模型
及時(shí)封閉銜接
運(yùn)用libevent事情驅(qū)動
多進(jìn)程作業(yè)模型拓寬:作業(yè)進(jìn)程池
編寫看護(hù)進(jìn)程和命令行參數(shù)
運(yùn)用Nginx作為反向代理效勞器
跋文
假如你對運(yùn)用PHP進(jìn)行網(wǎng)絡(luò)編程感興趣,我引薦Workman和Swoole這兩個(gè)項(xiàng)目。 前者是運(yùn)用純PHP代碼完成的網(wǎng)絡(luò)庫,后者是 韓天峰 開發(fā)的PHP拓寬。二者都支撐開發(fā)Socket/WebSocket/Http Server。