其實(shí)已經(jīng)寫了很久,但沒在生產(chǎn)環(huán)境用過。也沒宣傳過。
https://github.com/dvaknheo/workermanhttpd
https://gitee.com/dvaknheo/workermanhttpd
寫的時(shí)候參照 webman 精簡的。
開始還想和協(xié)程方式那樣處理折騰一些問題,后來沒管了
再后來配合我的 duckphp 框架 實(shí)現(xiàn) fpm/ workerman 兩棲。
對(duì) workerman 了解不深,不知道會(huì)有什么問題。
workerman 也是和 php-fpm 一樣多子進(jìn)程的吧。
如果是用協(xié)程模式,wokermanhttpd 的協(xié)程安全會(huì)有問題。
其他地方就沒底了
暫時(shí)沒有細(xì)致看代碼,但要說問題,可能就是這個(gè)東西有沒有實(shí)際意義了;
一般情況從fpm切換到cli下面無非是想使用常駐或者一些多線程的一些便利,在一些工程處理上肯定是做搬遷;舉個(gè)例子,比如之前開發(fā)的是TP框架,我現(xiàn)在想切換到cli下面使用不管是Workerman還是reactPHP還是swoole,肯定優(yōu)先考慮的是業(yè)務(wù)代碼變動(dòng)不要太大的切入到這套體系里;cli->fpm反之亦然。
沒有哪個(gè)用戶會(huì)因?yàn)閮蓷x擇一個(gè)框架,是沒有市場(chǎng)的,如果是一個(gè)易移植的框架可能會(huì)非常吃香。
那么,看來就和 webman 類似的了。WorkermanHttpd 并不是個(gè)框架,而是 http 服務(wù)器。
兼容直接調(diào)用 public 目錄下直接使用 .php 文件的功能。
直接 echo 輸出,不用非得在 Response 對(duì)象里操作。
header() 之類的不兼容函數(shù),只需要在前面加個(gè)
改由 WorkermanHttpd::header() 就可以了,參數(shù)也一樣。
其實(shí)要在webman上面實(shí)現(xiàn)和fpm其實(shí)也不是很難,寫兩個(gè)入口,甚至利用start.php作為fpm的入口也可以,只需稍稍改造以下即可;
判斷是否是cli模式,如果不是,就走fpm那一套,利用composer autoload加載框架對(duì)應(yīng)的內(nèi)容執(zhí)行并返回,如果是cli并且有workerman常量,那么就走webman相關(guān)的邏輯,關(guān)于http服務(wù)器,其實(shí)對(duì)于webman來說只是其中的一個(gè)進(jìn)程而已。
當(dāng)然,如果不想這么暴力,想要用工程化的思路解決這個(gè)地方的這個(gè)問題的話,可以使用適配器模式處理,就好比數(shù)據(jù)庫的各種驅(qū)動(dòng),mysql驅(qū)動(dòng)、odbc驅(qū)動(dòng)、pgsql驅(qū)動(dòng)等