摘要:之后協(xié)程化支持已經(jīng)完善并且支持大量的擴(kuò)展自動(dòng)協(xié)程化一些基于的框架也蓬勃發(fā)展光看著文檔就讓人躍躍欲試但是對(duì)于現(xiàn)有舊項(xiàng)目如何引入并啟用協(xié)程成了實(shí)際場(chǎng)景中的客觀問題由于協(xié)程性質(zhì)及生命周期等原因這并非想象的那么容易本文整理了在現(xiàn)有項(xiàng)目中引入并開啟協(xié)
Swoole4之后,協(xié)程化支持已經(jīng)完善,并且支持大量的PHP擴(kuò)展自動(dòng)協(xié)程化.一些基于Swoole4的框架也蓬勃發(fā)展,光看著文檔就讓人躍躍欲試.前置要求
但是對(duì)于現(xiàn)有舊項(xiàng)目如何引入并啟用Swoole協(xié)程成了實(shí)際場(chǎng)景中的客觀問題,由于協(xié)程性質(zhì)及生命周期等原因,這并非想象的那么容易.
本文整理了在現(xiàn)有項(xiàng)目中引入Swoole4并開啟協(xié)程的一些步驟及需要注意的問題,期望可以為有需要的人提供幫助.
請(qǐng)閱讀Swoole文檔中環(huán)境依賴的章節(jié),本文只針對(duì)代碼部分的調(diào)整.下文默認(rèn)已成功編譯安裝了Swoole4擴(kuò)展.框架代碼部分
首先請(qǐng)查閱所用框架是否有結(jié)合Swoole的開源方案,如laravel-s等.如有可按需選用,如沒有也參照業(yè)務(wù)代碼部分對(duì)框架代碼進(jìn)行改造.(這會(huì)導(dǎo)致升級(jí)框架版本變困難)業(yè)務(wù)代碼部分
首先閱讀Swoole文檔中協(xié)程編程須知的章節(jié).
對(duì)單例對(duì)象按協(xié)程ID做隔離,防止單例對(duì)象跨協(xié)程使用.對(duì)Mysql,Redis等連接資源需要defer進(jìn)行回收復(fù)用或關(guān)閉,防止連接數(shù)持續(xù)增加.
對(duì)全局變量及常量做評(píng)估,所有可能引起問題的地方全部按協(xié)程ID做隔離.
對(duì)項(xiàng)目?jī)?nèi)直接echo,print之類輸出的位置做修改,或使用ob_start方法進(jìn)行獲取輸出內(nèi)容進(jìn)行處理.
對(duì)項(xiàng)目?jī)?nèi)使用不支持自動(dòng)協(xié)程化的庫做修改,采用協(xié)程客戶端進(jìn)行替換.(如:curl).
對(duì)項(xiàng)目?jī)?nèi)使用exit,die的地方做修改.
對(duì)static靜態(tài)類,屬性或變量及引用傳遞進(jìn)協(xié)程的變量都要小心操作,盡量避免這種情況,只使用局部變量.
對(duì)每次修改做好單元測(cè)試,做好備份及回滾措施.
可從某些單一場(chǎng)景下入手逐步進(jìn)行修改.(如:某個(gè)單一業(yè)務(wù)模塊,某個(gè)簡(jiǎn)單PHP腳本等).
總結(jié)上述修改看似內(nèi)容不多,但是在一個(gè)現(xiàn)有的項(xiàng)目中進(jìn)行修改并保證服務(wù)正常運(yùn)行卻并非易事,希望大家小心操作,早日成功.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31763.html
摘要:有研究過框架的同學(xué)就會(huì)發(fā)現(xiàn),其實(shí)最核心的,就是用了拓展加上拓展來實(shí)現(xiàn)其底層的網(wǎng)絡(luò)服務(wù)和多進(jìn)程調(diào)度。我們?cè)谀J较?,測(cè)試起五個(gè)進(jìn)程主進(jìn)程要等待回收我們,這樣就很簡(jiǎn)單的實(shí)現(xiàn)了一個(gè)多進(jìn)程的協(xié)程服務(wù)。 有研究過Workman框架的同學(xué)就會(huì)發(fā)現(xiàn),其實(shí)workman最核心的,就是用了php socket拓展加上pcntl拓展來實(shí)現(xiàn)其底層的網(wǎng)絡(luò)服務(wù)和多進(jìn)程調(diào)度。那我們今天就來探討如何使用Swoole的...
摘要:官方文檔中對(duì)協(xié)程的示例大多按照一次請(qǐng)求一個(gè)協(xié)程或腳本并發(fā)大量協(xié)程的方式來舉例說明這種使用方式下提升的是整體的性能而非單次請(qǐng)求的響應(yīng)時(shí)間要提升單次請(qǐng)求的響應(yīng)效率或提升非網(wǎng)絡(luò)服務(wù)下腳本代碼的運(yùn)行效率需要在業(yè)務(wù)代碼中主動(dòng)使用協(xié)程來處理那些可并發(fā)的 Swoole官方文檔中對(duì)協(xié)程的示例大多按照一次請(qǐng)求一個(gè)協(xié)程(或腳本并發(fā)大量協(xié)程)的方式來舉例說明,這種使用方式下提升的是整體的性能,而非單次請(qǐng)求的...
摘要:訪問安全問題為什么說有訪問安全問題呢傳統(tǒng)地,在的的環(huán)境中,很少有遇到所謂變量安全訪問問題。上下文管理器為了解決這個(gè)問題,我們引入?yún)f(xié)程上下文管理這樣的概念,由此來實(shí)現(xiàn)每個(gè)協(xié)程環(huán)境內(nèi)的數(shù)據(jù)隔離。 訪問安全問題 為什么說有訪問安全問題呢?傳統(tǒng)地,在php的的環(huán)境中,很少有Phper遇到所謂變量安全訪問問題。舉個(gè)例子,代碼大約如下: class db { protected stati...
摘要:為語言提供了強(qiáng)大的協(xié)程編程模式。提供的協(xié)程語法借鑒自,在此向開發(fā)組致敬協(xié)程可以與很好地互補(bǔ)。并發(fā)執(zhí)行使用創(chuàng)建協(xié)程,可以讓和兩個(gè)函數(shù)變成并發(fā)執(zhí)行。協(xié)程需要拿到請(qǐng)求的結(jié)果。 Swoole4為PHP語言提供了強(qiáng)大的CSP協(xié)程編程模式。底層提供了3個(gè)關(guān)鍵詞,可以方便地實(shí)現(xiàn)各類功能。 Swoole4提供的PHP協(xié)程語法借鑒自Golang,在此向GO開發(fā)組致敬 PHP+Swoole協(xié)程可以與...
摘要:開發(fā)負(fù)責(zé)人創(chuàng)建分支,編寫單元測(cè)試腳本,編寫代碼,實(shí)現(xiàn)提案中的所有內(nèi)容,最終發(fā)起交叉評(píng)審,檢查代碼,提出改進(jìn)意見,反饋給開發(fā)負(fù)責(zé)人,繼續(xù)完善細(xì)節(jié)。 Swoole開源項(xiàng)目從2012年開始發(fā)布第一個(gè)版本,到現(xiàn)在已經(jīng)有近7年的歷史。在這七年的時(shí)間里: 提交了8821次代碼變更 發(fā)布了287個(gè)版本 收到并解決1161次issue反饋 合并了603次pull request 共有100位開發(fā)者...
閱讀 2978·2021-11-25 09:43
閱讀 3600·2021-11-24 11:13
閱讀 3373·2021-10-14 09:42
閱讀 2578·2021-09-23 11:53
閱讀 3622·2021-09-22 15:57
閱讀 3233·2021-09-02 09:54
閱讀 3510·2019-08-30 13:47
閱讀 1650·2019-08-29 16:55