AutoCAD 3DMAX C語言 Pro/E UG JAVA編程 PHP編程 Maya動畫 Matlab應用 Android
Photoshop Word Excel flash VB編程 VC編程 Coreldraw SolidWorks A Designer Unity3D
 首頁 > Linux

PHP服務器端多進程代碼代碼演示

51自學網 http://www.4331592.live

PHP服務器端多進程代碼代碼演示

  PHP是目前應用最廣泛的Web開發語言,所以用PHP來做服務器端的應用可以降低成本。文章將介紹一個PHP在服務器端的多進程編程實例,在很多場景下,比如郵件的分發、遠程服務的調用、數據的聚合、計劃任務等等,都能夠用到PHP多進程編程。

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

  為什么PHP多進程很好?        (PHP服務器端多進程代碼代碼演示)

         網游服務器大部分都使用多線程而不是多進程的原因也在于進程比線程更加穩定。而且多線程適合現在多核服務器的應用場景,更能發揮多核運算的能力。進程的維護可以用很多操作系統級別的工具。Message Queue解決了多大部分線程通信問題。所以PHP多進程很適合做服務器端的計算密集型的應用。

  據一家越南IT公司介紹,他們成功的把PHP后臺多進程用在法律文件的分發、處理銀行賬戶的金額這樣的企業級的應用上。

  使用后臺PHP進程可以不影響服務器同時處理網頁的請求。這種后臺進程一旦發生失敗很容易查處原因進行恢復或者補救,所以健壯性更高。不同的進程相互隔離,更加高效,可以統一調度各個服務進程。

  PHP是目前應用最廣泛的Web開發語言,所以用PHP來做服務器端的應用可以降低成本?梢杂矛F有人員、現有配置、甚至做到代碼重用。什么樣的場 景更適合用PHP后臺多進程呢?比如郵件的分發、遠程服務的調用、數據的聚合、計劃任務、計算結果的緩存這些不需要立即返回的地方。

  PHP單進程在某些地方完全可以達到目的,而且更加容易實現,不用考慮進程的同步問題,不用考慮數據的共享問題。PHP CLI(SAPI SERVER API) 命令行接口可以用來做CRON計劃任務, 圖形界面程序 (使用GTK庫)。

  PHP CLI例子

  php -f test.php

  php -r “echo time();”

  php -R as python style

  PHP讀取命令行參數:      (PHP服務器端多進程代碼代碼演示)

      <?php

  #!/usr/bin/php -q

  echo “Test Arguments:/n”;

  echo $_SERVER["argc"].”/n”;

  echo $_SERVER["argv"][0].”/n”;

  ?>

  PHP命令行接口標準輸入輸出:

      <?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可以定時運行某些任務,但要防止重復運行。開始時創建一個鎖文件, 結束時刪除;蛘哂胮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多進程應用的容錯性?      (PHP服務器端多進程代碼代碼演示)

  ◆可以監控進程,依賴進程失敗后報告。

  ◆用CRONJOB實現監控進程。

  ◆將被監控進程PID寫成文件。

  ◆定時檢查PID文件是否存在 檢查ps -o pid=或者file_exists(‘/proc/’)。

  ◆如果線程不存在重啟進程。

  回顧以前用Java或者Python做的服務器端的服務都可以用PHP來實現。單一語言更容易維護。以往人們對于Web語言的認識很片面,例如多線程、事務這些東西都可以改變方式來達到同樣的目的。


 
上一篇:Linux下如何架設WEB服務器  下一篇:怎么架設PHP服務器?
南通长牌手机版下载 好运来平肖平码论坛 贵州十一选五前三彩经网 宁夏十一选五开奖走势图 重庆幸运农场 湖北十一选五开奖结果走势图111期 体彩上海11选5怎么玩 和讯股票 43期大乐透开奖号码 安微体彩11迭5走势图 福彩3d跨度走走势图