摘要:網(wǎng)絡(luò)編程一直是的短板,盡管擴(kuò)展彌補(bǔ)了這個(gè)缺陷,但是其編程風(fēng)格偏向了或,與原本的同步編程風(fēng)格迥然相異。目前的大部分主流應(yīng)用框架依然是同步編程風(fēng)格,所以一直在探索與同步編程結(jié)合的途徑。正是連接同步編程和異步編程的一座橋梁,有興趣可以關(guān)注一下。
網(wǎng)絡(luò)編程一直是PHP的短板,盡管Swoole擴(kuò)展彌補(bǔ)了這個(gè)缺陷,但是其編程風(fēng)格偏向了NodeJS或GoLang,與原本的同步編程風(fēng)格迥然相異。目前PHP的大部分主流應(yīng)用框架依然是同步編程風(fēng)格,所以一直在探索Swoole與同步編程結(jié)合的途徑。LNMP的不足
lumen-swoole-http正是連接同步編程Lumen和異步編程Swoole的一座橋梁,有興趣可以關(guān)注一下。
LNMP是經(jīng)典的Web應(yīng)用架構(gòu)組合,雖然(Linux、NginX、MySQL和PHP-FPM)四者各種是優(yōu)秀的系統(tǒng)或軟件,但是組合到一起的總體性能并不盡人意,明顯的不是1+1+1+1>4,而是4+3+2+1<1。Linux系統(tǒng)無可厚非,主要問題出現(xiàn)在:
從NginX到PHP-FPMNginX利用IO多路復(fù)用機(jī)制epoll,極大地減少了IO阻塞等待,可以輕松應(yīng)對(duì)C10K??墒敲看蜰ginX將用戶請(qǐng)求傳遞給PHP-FPM時(shí),PHP-FPM總是需要從新加載PHP項(xiàng)目代碼:創(chuàng)建執(zhí)行環(huán)境,讀取PHP文件和代碼解析、編譯等操作一次又一次的重復(fù)執(zhí)行,造成不小的消耗。
從PHP-FPM到MySQL由于PHP代碼本身是同步執(zhí)行,PHP-FPM連接MySQL查詢數(shù)據(jù)時(shí),只能空閑等待MySQL返回查詢結(jié)果。一個(gè)查詢語句執(zhí)行時(shí)間可能會(huì)需要幾秒鐘,期間PHP-FPM若是能暫時(shí)放下當(dāng)前用戶慢查詢請(qǐng)求,而去處理其他用戶請(qǐng)求,效率必然有所提高。
Swoole HTTP服務(wù)器Swoole HTTP服務(wù)器也采用了epoll機(jī)制,運(yùn)行性能與NginX相比,雖不及,猶未遠(yuǎn)。不過Swoole HTTP服務(wù)器嵌入PHP中作為其一部分,可以直接運(yùn)行PHP,完全可以取代NginX + PHP-FPM組合。
以目前流行的為框架Lumen(Laravel的子框架)為例,用Swoole HTTP服務(wù)器運(yùn)行Lumen項(xiàng)目十分簡(jiǎn)單,只需要在$worker->onRequest($request, $response)(收到用戶請(qǐng)求)時(shí)將$request傳給Lumen處理,$response再將Lumen的處理結(jié)果返回給用戶,而且$worker的整個(gè)生命周期里只會(huì)加載一次Lumen項(xiàng)目代碼,沒有多余的磁盤IO和PHP代碼編譯的開銷。
壓力測(cè)試在4GB+4Core的虛擬機(jī)下,測(cè)試HTTP服務(wù)器的靜態(tài)輸出:
2000客戶端并發(fā)500000請(qǐng)求,不開啟HTTP Keepalive,平均QPS:
NginX + HTML QPS:25883.44 NginX + PHP-FPM + Lumen QPS:828.36 Swoole + Lumen QPS:13647.75
2000客戶端并發(fā)500000請(qǐng)求,開啟HTTP Keepalive,平均QPS:
NginX + HTML QPS:86843.11 NginX + PHP-FPM + Lumen QPS:894.06 Swoole + Lumen QPS:18183.43
可以看出,Swoole + Lumen組合的執(zhí)行效率遠(yuǎn)高于NginX + PHP-FPM + Lumen組合。
異步MySQL客戶端以上都是鋪墊,以下才是整篇文章的重點(diǎn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28332.html
摘要:負(fù)責(zé)解釋執(zhí)行文件生成響應(yīng),最終返回給,展現(xiàn)至前端。相比于傳統(tǒng)架構(gòu),進(jìn)程模型最大的特點(diǎn)在于其多線程模式處理網(wǎng)絡(luò)請(qǐng)求,使得其能輕松應(yīng)對(duì)大量連接。這要求開發(fā)人員對(duì)于多進(jìn)程的運(yùn)行模式有更清晰的認(rèn)識(shí)更容易內(nèi)存泄露。 一、SwooleSwoole號(hào)稱重新定義了PHP,它是一個(gè)PHP擴(kuò)展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...
摘要:從入門到放棄二一異步毫秒定時(shí)器設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與定時(shí)器不同的是定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀最大不超過使用定時(shí)器來刪除定時(shí)器。 swoole——從入門到放棄(二) 一、異步毫秒定時(shí)器 swoole_timer_tick:設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與after定時(shí)器不同的是tick定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:從入門到放棄二一異步毫秒定時(shí)器設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與定時(shí)器不同的是定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用清除。是一次性函數(shù),執(zhí)行完成后就會(huì)銷毀最大不超過使用定時(shí)器來刪除定時(shí)器。 swoole——從入門到放棄(二) 一、異步毫秒定時(shí)器 swoole_timer_tick:設(shè)置一個(gè)間隔時(shí)鐘定時(shí)器,與after定時(shí)器不同的是tick定時(shí)器會(huì)持續(xù)觸發(fā),直到調(diào)用swoole_timer_clear清...
摘要:當(dāng)某種網(wǎng)絡(luò)事件發(fā)生時(shí),會(huì)回調(diào)用戶設(shè)置的指定回調(diào)函數(shù)。承擔(dān)了底層網(wǎng)絡(luò)事件的監(jiān)聽及各種底層事件處理,當(dāng)收到請(qǐng)求時(shí),會(huì)觸發(fā)事件提醒,然后將控制權(quán)轉(zhuǎn)交預(yù)先注冊(cè)的事件回調(diào)函數(shù),來進(jìn)行后續(xù)的處理。請(qǐng)求到來時(shí)創(chuàng)建,請(qǐng)求結(jié)束后銷毀。 運(yùn)行流程圖 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...
閱讀 868·2023-04-25 17:33
閱讀 3725·2021-07-29 14:49
閱讀 2536·2019-08-30 15:53
閱讀 3524·2019-08-29 16:27
閱讀 2066·2019-08-29 16:11
閱讀 1094·2019-08-29 14:17
閱讀 2585·2019-08-29 13:47
閱讀 2093·2019-08-29 13:28