天天看點

WorkerMan和ThingPHP的結合使用 workerman和thinkphp完美結合使用

workerman和thinkphp完美結合使用

轉載  2016年05月26日 16:48:10

  • 8250

下載下傳workerman, 放入thinkphp,注意與Home平級,就把workerman當做是一個子產品。

進入Home/Controller目錄,建立WorkermanController.class.php

直接上源碼,這裡我是以守護程序方式運作的,調試的話,可以去掉daemonize = true 這行.

[php]  view plain  copy

  1. <?php  
  2. namespace Home\Controller;  
  3. use Workerman\Worker;  
  4. class WorkermanController{  
  5.     public function index(){  
  6.         if(!IS_CLI){  
  7.             die("access illegal");  
  8.         }  
  9.         require_once APP_PATH.'Workerman/Autoloader.php';  
  10.         define('MAX_REQUEST', 1000);// 每個程序最多執行1000個請求  
  11.         Worker::$daemonize = true;//以守護程序運作  
  12.         Worker::$pidFile = '/data/wwwlogs/Worker/workerman.pid';//友善監控WorkerMan程序狀态  
  13.         Worker::$stdoutFile = '/data/wwwlogs/Worker/stdout.log';//輸出日志, 如echo,var_dump等  
  14.         Worker::$logFile = '/data/wwwlogs/Worker/workerman.log';//workerman自身相關的日志,包括啟動、停止等,不包含任何業務日志  
  15.         $worker = new Worker('text://172.16.0.10:10024');//此處我使用内網ip  
  16.         $worker->name = 'Worker';  
  17.         $worker->count = 2;  
  18.         //$worker->transport = 'udp';// 使用udp協定,預設TCP  
  19.         $worker->onWorkerStart = function($worker){  
  20.             echo "Worker starting...\n";  
  21.         };  
  22.         $worker->onMessage = function($connection, $data){  
  23.             static $request_count = 0;// 已經處理請求數  
  24.             //$_rs=D("Article")->gettest();  
  25.             $_articleObj=A("article");  
  26.             $_rs=$_articleObj->gettest();  
  27.             var_dump($_rs);  
  28.             $connection->send("hello");  
  29.             if(++$request_count >= MAX_REQUEST){// 如果請求數達到1000  
  30.                 Worker::stopAll();  
  31.             }  
  32.         };  
  33.         $worker->onBufferFull = function($connection){  
  34.             echo "bufferFull and do not send again\n";  
  35.         };  
  36.         $worker->onBufferDrain = function($connection){  
  37.             echo "buffer drain and continue send\n";  
  38.         };  
  39.         $worker->onWorkerStop = function($worker){  
  40.             echo "Worker stopping...\n";  
  41.         };  
  42.         $worker->onError = function($connection, $code, $msg){  
  43.             echo "error $code $msg\n";  
  44.         };  
  45.         // 運作worker  
  46.         Worker::runAll();  
  47.     }  
  48. }  

修改Workerman/Worker.php源碼,找到parseCommand()方法,workerman版本3.3.2的話,在586行,修改指令行檢測文法:

[php]  view plain  copy

  1. <?php  
  2. protected static function parseCommand()  
  3. {  
  4.     global $argv;  
  5.     // Check argv;  
  6.     $start_file = $argv[0];  
  7.     if (!isset($argv[2])) { //修改了此處  
  8.        exit("Usage: php yourfile.php Controller/Action {start|stop|restart|reload|status|kill}\n");//修改了此處提示  
  9.     }  
  10.     // Get command.  
  11.     $command  = trim($argv[2]);//修改了此處  
  12.     $command2 = isset($argv[3]) ? $argv[3] : '';//修改了此處  
  13.    ....  
  14. }  

OK,此時大功告成。

Linux指令行下運作,注意,此處要切換到thinkphp根目錄下面

/usr/local/php/bin/php index.php Workerman/index start

檢視運作狀态:

/usr/local/php/bin/php index.php Workerman/index status