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使用命名空间,此处同样需要填写完整的命名空间

最新文章

  1. [Python]实现简单决策树
  2. BIEE11G配置Oracle数据源
  3. C#操作字符串方法总结<转>
  4. Java学习笔记(一)——HelloWorld
  5. SVN 忽略文件但不删除文件
  6. MATLAB学习笔记(六)——MATLAB数据分析与多项式计算
  7. hdu5442(2015长春赛区网络赛1006)后缀数组+KMP /最小表示法?
  8. [C/CPP系列知识] 那些程序C语言可以编译通过但C++无法编译成功 Write a C program that won’t compile in C++
  9. ORACLE 小写金额转大写金额
  10. asp.net学习之 数据绑定控件--表格绑定控件
  11. Borda count
  12. 关于binary log那些事——认真码了好长一篇
  13. 开启Tomcat远程调试(转)
  14. ffmpeg结构体以及函数介绍(一)
  15. css常用命名
  16. Es6 的类(class)
  17. WPF DataGrid 数据绑定、样式、分页、增删改查,连接Access数据库
  18. centos7----pstree
  19. 记webpack下引入vue的方法(非.vue文件方式)
  20. 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder'

热门文章

  1. hdu6005找带权最小环
  2. poj1149 经典建模
  3. Spring Boot 教程(2) - Mybatis
  4. 【github技巧2】下载包加速
  5. vue仿移动端输入框
  6. byte值的问题
  7. SpringCloud(二)- Consul介绍、安装、使用
  8. Mysql基础(三)
  9. 07 . Python3函数
  10. 01 . Mysql简介及部署