1. 伺服器程序源代碼分析之二:php-fpm
php作為排名top2 互聯網開發工具,非常流行,可以參考:中國最大的25個網站採用技術選型方案
php這個名稱實際上有兩層含義
直接定義:
php-fpm從php5.3.3開始已經進入到php源代碼包,之前是作為patch存在的
很少人會去讀php本身源代碼,我6年前解決php內存泄露問題的時候做了些研究,最近再查看了一番,發現php的開發者很有誠意,這是一款非常出色的伺服器軟體,支持如下
在linux伺服器上,如果不設置 events.mechanism ,那麼默認就是採用epoll,所以
php-fpm的IO模型&並發處理能力和nginx是完全一致
nginx以性能卓越聞名,大部分程序員都認為php效率低下,看了源代碼,才知道這是傳奇啊
在高性能部署的時候,大家往往會針對性的優化nginx 。我自己之前部署php程序也犯了錯誤,8G內存的server,php-fpm的max children都會設置128+,現在看來太多了,參考nginx的部署:
php-fpm配置為 3倍 cpu core number就可以了
php-fpm穩定性比nginx稍差 這是因為php-fpm內置了一個php解析器,php-fpm進程就和php程序捆綁了,如果php腳本寫得不好,有死循環或者阻塞在某個遠端資源上,會拖累載入它的php-fpm進程
而nginx和後端應用伺服器之間通過網路連接,可以設置timeout,不容易堵死的
php-fpm的fastcgi是短連接 我原以為是長連接的,看了代碼才知道也是短連接,處理一個request就關閉掉
php-fpm介面採用fastcgi 非常遺憾,php-fpm和fastcgi完全綁定了,無法獨立使用 。只能部署在支持http-fcgi協議轉換程序背後(nginx)。其實可以考慮在php-fpm代碼包裡面引入http協議支持,這樣php-fpm可以獨立運行,讓nodejs無話可說
php-fpm等同於OpenResty OpenResty是一個國人開發的nginx模塊,就是在nginx引入lua解釋器. 實際上,它和php-fpm的唯一差別就是一個採用php語法,一個用lua,所以OpenResty要作為nginx增強包使用還可以,要選擇它作為一個主要編程工具,沒有任何必要
從架構上來說,php-fpm已經做到最好,超過大多數 python部署工具,我再也不黑它了
2. php鏂囦歡鐢ㄤ粈涔堣蔣浠舵墦寮
php鏂囦歡鎯沖繀寰堝氬皬浼欎即紕板埌榪囷紝浣嗘槸閮芥瘮杈冮檶鐢燂紝涓嶇煡閬損hp鏂囦歡鏄浠涔堬紝鎬庝箞鎵撳紑錛屽叾瀹瀙hp鏂囦歡鏄涓縐嶇函鏂囨湰鏂囦歡錛屽叾涓鍖呭惈PHP緙栫▼璇璦緙栧啓鐨勪唬鐮佸矓瀚屾。錛屾兂瑕佹墦寮瀹冧竴鍏辨湁鍥涚嶆柟娉曪紝灝忕紪鍏ㄩ儴鏀懼湪涓嬮潰鐨勬枃絝犱腑浜嗭紝鎯寵佹墦寮php鏂囦歡鐨勫皬浼欎即鍙浠ユ潵鐪嬬湅鏁欑▼銆
php鏂囦歡鐢ㄤ粈涔堣蔣浠舵墦寮?
鏂規硶涓銆
1.鍙沖嚮.php鏂囦歡錛岄夋嫨璁頒簨鏈鎵撳紑錛屽氨鍙浠ョ湅鍒版枃浠朵唬鐮佸暒!
鏂規硶浜屻
1.Dreamweaver鏄緗戦〉緙栬緫鍣錛屾瘮杈冩祦琛岀殑緗戠珯寮鍙戝伐鍏鳳紝浣犲彲浠ョ洿鎺ユ妸鏂囦歡鎷栬繘鍘誨氨鍙浠ユ愪貢鎵撳紑php鏂囦歡浜嗐
鏂規硶涓夈
1.Notepad++宸ュ叿涔熸槸浠g爜緙栬緫鍣錛岄夋嫨鏂囦歡鎵撳紑灝辮屻
鏂規硶鍥涖
1.榪樺彲浠ョ敤SublimeText宸ュ叿錛屽拰涓婇潰鏂規硶涓鏍鳳紝鐩存帴閫夋嫨鏂囦歡鎵撳紑灝辮屻
浠ヤ笂灝辨槸灝忕紪涓哄ぇ瀹跺甫鏉ョ殑php鏂囦歡鐢ㄤ粈鑰呯噧涔堣蔣浠舵墦寮鐨勬柟娉曚簡錛屽笇鏈涜兘甯鍔╁埌澶у躲