thinkphp5集成GatewayWorker


Workerman是一款純PHP開發的開源高性能的PHP socket 服務器框架,而GatewayWorker則是基於Workerman開發的一個長連接框架,支持分布式部署,支持全局廣播或者向任意客戶端推送數據,作為快速開發TCP長連接應用非常方便;

說明,本文主要通過手動安裝GatewayWorker擴展,因此拷貝vendor下的核心代碼即可。暫不提供composer安裝說明

 

第一步:下載GatewayWorker(Fork地址 https://github.com/walkor/gatewayworker)

第二步:將GatewayWorker文件夾中的“GatewayWorker\vendor\”下“Workerman”放入tp5項目extend目錄

第三步:添加入口文件

在項目根目錄 新增啟動服務文件server.php,用於在cli模式下運行tp

關鍵代碼:

  ini_set('display_errors', 'on');

  if(strpos(strtolower(PHP_OS), 'win') === 0){
    exit("start.php not support windows.\n");
  }
  // 檢查擴展
  if(!extension_loaded('pcntl')){
    exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
  }
  if(!extension_loaded('posix')){
    exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
  }


  define('APP_PATH', __DIR__ . '/application/');
  //綁定默認模塊和控制器
  define('BIND_MODULE', 'push/Run');
  // 加載框架引導文件
  require __DIR__ . '/thinkphp/start.php';

第四步:編寫GatewayWorker運行代碼

Run 控制器:

  路徑:/application/push/controller/Run.php

  關鍵代碼:

    use Workerman\Worker;
    use GatewayWorker\Register;
    use GatewayWorker\BusinessWorker;
    use GatewayWorker\Gateway;

    //控制器無需繼承Controller

    /**
    * 構造函數
    * @access public
    */
    public function __construct(){
      //由於是手動添加,因此需要注冊命名空間,方便自動加載,具體代碼路徑以實際情況為准
      \think\Loader::addNamespace([
        'Workerman' => EXTEND_PATH . 'Workerman/workerman',
        'GatewayWorker' =>EXTEND_PATH . 'Workerman/gateway-worker/src',
      ]);

      /初始化各個GatewayWorker

      //1.初始化register
      new Register('text://0.0.0.0:1238');

      //2.初始化 bussinessWorker 進程
      $worker = new BusinessWorker();
      $worker->name = 'YourAppBusinessWorker';
      $worker->count = 4;
      $worker->registerAddress = '127.0.0.1:1238';

      
           //3.設置處理業務的類,此處制定Events的命名空間
        $worker->eventHandler = '\app\push\controller\Events';


      //4.初始化 gateway 進程
      $gateway = new Gateway("websocket://0.0.0.0:8282");
      $gateway->name = 'YourAppGateway';
      $gateway->count = 4;
      $gateway->lanIp = '127.0.0.1';
      $gateway->startPort = 2900;
      $gateway->registerAddress = '127.0.0.1:1238';

      //運行所有Worker;
      Worker::runAll();

    }

第五步:編寫Events.php 進行業務處理;

Events 控制器:

  路徑:/application/push/controller/Events.php

  關鍵代碼: 

  1. 可直接使用GatewayWorker代碼包中GatewayWorker\Applications\YourApp的Events.php代碼
  2. 也可使用TP的各種函數和類庫

至此,服務端已經編寫完畢;

第六步:運行程序

使用終端執行命令: php /wwwroot/你的tp5項目/server.php start

 

 

總結:

集成GatewayWorker擴展,無非就是如何正確加載GatewayWorker相關類庫文件以及設定處理業務的 controller,容易出錯的地方也就是這個地方:


1 GatewayWorker的自動加載
關鍵代碼:

  1.  \think\Loader::addNamespace([
  2.             'Workerman' => EXTEND_PATH . 'Workerman/workerman',
  3.             'GatewayWorker' =>EXTEND_PATH . 'Workerman/gateway-worker/src',
  4.  ]);

只要確保文件加載正常,后續操作就是將 Register,BusinessWorker和Gateway 初始化,運行即可

2 $worker->eventHandler,設定處理業務的 controller,tp5使用命名空間,此處同樣需要填寫完整的命名空間

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM