swoole如何熱更新

隨著swoole的版本迭代更新,已經足夠穩定了,在阿里,騰訊,yy等各大公司都有著使用,也有很多游戲圈里的朋友也在使用,這些朋友經常會提到一個問題,每次代碼更新還需要停止服務,然后重新啟動,來達到更新代碼,然而這種做法,是比較粗暴的。

swoole如何熱更新

其實swoole里提供reload的特性,完全支持代碼的熱更新。

在介紹swoole的reload之前,先簡要的講講web方式是如何改了文件就立即生效的:

幾個概念:?? ? ? ? ? ? ? ? ? ? ?(推薦學習: swoole視頻教程

1) sapi:可以簡單的理解為php引擎對外的一個統一接口,使得php可以和外部程序進行交互

2) php的生命周期中關鍵四個調用:MINT -> RINT -> RSHUTDOWN -> MSHUTDOWN

3)? fpm : fastcgi進程管理器

那么fpm方式的流程就是: fpm通過sapi接口與php進程交互,在fpm啟動的時候,

第一步: 會調用各擴展的MINT方法,進行一些數據初始化(長駐內存),

第二步: 每個請求過來,先會執行RINT對單個請求行一個初始化,

第三步: 執行php腳本,

第四步: 執行RSHUTDOWN方法,

第五步: 如果你要停止fpm了,才會執行MSHUTDOWN。

fpm對每個請求的處理都是一直在在重復執行 2~4步 。

在第三步中, php的腳本是動態執行的,由于每次都要執行一次php腳本,而每次php腳本都要有一個把php文件翻譯成opcode的流程(比較耗時), 于是就產生的opcache工具。

opcache:? 直接把php翻譯后的opcode代碼樹保存到共享內存中,以便直接使用,從而減少每次都把php翻譯成opcode的開銷。

opcache的問題:按照他的描述,修改了php文件,并不能立即被更新,

opcache的解決方案:有一個配置來設置隔多長時間檢測文件是否更新了,從而有機會在第二步重新來reload相關的文件.

當然,你也可以直接reload fpm,從而達到php熱更新的效果(opcache擴展可以在第四步把相關的opcode cache給清空)。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享