新聞中心
最近比較PHP跟Python, Erlang的特性,發(fā)現PHP有很多人們不常用到的特性。用PHP CLI可以實現很多不錯的應用。比如做搜索引擎的爬蟲, 長期運行的計算腳本, 完全可以取代其他語言來做服務器的運維。這對于熟悉PHP的人來說如虎添翼。

為大同等地區(qū)用戶提供了全套網頁設計制作服務,及大同網站建設行業(yè)解決方案。主營業(yè)務為網站制作、成都做網站、大同網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
推薦閱讀:讓PHP開發(fā)者事半功倍的十大技巧
為什么PHP多進程很好? 網游服務器大部分都使用多線程而不是多進程的原因也在于進程比線程更加穩(wěn)定。而且多線程適合現在多核服務器的應用場景,更能發(fā)揮多核運算的能力。進程的維護可以用很多操作系統(tǒng)級別的工具。Message Queue解決了多大部分線程通信問題。所以PHP多進程很適合做服務器端的計算密集型的應用。
據一家越南IT公司介紹,他們成功的把PHP后臺多進程用在法律文件的分發(fā)、處理銀行賬戶的金額這樣的企業(yè)級的應用上。
使用后臺PHP進程可以不影響服務器同時處理網頁的請求。這種后臺進程一旦發(fā)生失敗很容易查處原因進行恢復或者補救,所以健壯性更高。不同的進程相互隔離,更加高效,可以統(tǒng)一調度各個服務進程。
PHP是目前應用最廣泛的Web開發(fā)語言,所以用PHP來做服務器端的應用可以降低成本。可以用現有人員、現有配置、甚至做到代碼重用。什么樣的場景更適合用PHP后臺多進程呢?比如郵件的分發(fā)、遠程服務的調用、數據的聚合、計劃任務、計算結果的緩存這些不需要立即返回的地方。
PHP單進程在某些地方完全可以達到目的,而且更加容易實現,不用考慮進程的同步問題,不用考慮數據的共享問題。PHP CLI(SAPI SERVER API) 命令行接口可以用來做CRON計劃任務, 圖形界面程序 (使用GTK庫)。
PHP CLI例子
- php -f test.php
- php -r “echo time();”
- php -R as python style
PHP讀取命令行參數:
- #!/usr/bin/php -q
- echo “Test Arguments:\n”;
- echo $_SERVER["argc"].”\n”;
- echo $_SERVER["argv"][0].”\n”;
- ?>
PHP命令行接口標準輸入輸出:
- #!/usr/bin/php -q
- /* Define STDIN in case if it is not already defined by PHP for some reason */
- if(!defined(“STDIN”)) {
- define(“STDIN”, fopen(‘php://stdin’,'r’))
- }
- echo “Hello! What is your name (enter below):\n”;
- $strName = fread(STDIN, 80); // Read up to 80 characters or a newline
- echo ‘Hello ‘ , $strName , “\n”;
- ?>
CRONJOB可以定時運行某些任務,但要防止重復運行。開始時創(chuàng)建一個鎖文件, 結束時刪除?;蛘哂胮s命令來處理。任務隊列可以用MySQL來實現,或者Key/VALUE數據庫,或者消息隊列來實現。
進程控制相關函數:
- Process Control Extensions
- pcntl_fork()
- posix_setsid()
- posix_kill
- pcntl_wait
- pcntl_signal
- SIGHUP
- SIGTERM; system shutdown, kill
- SIGINT; sent by Ctrl+c
- SIGKILL (uncatchable); unresponsive, kill -9
- SIGCHLD; child status change
- SIGSTP; sent by Ctrl+z
- SIGCONT; resume from stop, fg
PHP不能對某些錯誤拋出異常,如何提高PHP多進程應用的容錯性?
◆可以監(jiān)控進程,依賴進程失敗后報告。
◆用CRONJOB實現監(jiān)控進程。
◆將被監(jiān)控進程PID寫成文件。
◆定時檢查PID文件是否存在 檢查ps -o pid=或者file_exists(‘/proc/’)。
◆如果線程不存在重啟進程。
回顧以前用Java或者Python做的服務器端的服務都可以用PHP來實現。單一語言更容易維護。以往人們對于Web語言的認識很片面,例如多線程、事 務這些東西都可以改變方式來達到同樣的目的。
原文鏈接:http://blog.eood.cn/server-side-php-progress-program-best-practice
【編輯推薦】
- PHP生成隨機字符串的三種方法
- 百萬級PHP網站架構工具箱
- 大型Web應用運行時 PHP負載均衡指南
- 讓PHP開發(fā)者事半功倍的十大技巧
- PHP資深開發(fā)者談:緣何放棄PHP改用Python
分享標題:服務器端PHP多進程編程實戰(zhàn)
瀏覽路徑:http://fisionsoft.com.cn/article/dpocoio.html


咨詢
建站咨詢
