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
关键代码:
- 可直接使用GatewayWorker代码包中GatewayWorker\Applications\YourApp的Events.php代码
- 也可使用TP的各种函数和类库
至此,服务端已经编写完毕;
第六步:运行程序
使用终端执行命令: php /wwwroot/你的tp5项目/server.php start
总结:
集成GatewayWorker扩展,无非就是如何正确加载GatewayWorker相关类库文件以及设定处理业务的 controller,容易出错的地方也就是这个地方:
1 GatewayWorker的自动加载
关键代码:
- \think\Loader::addNamespace([
- 'Workerman' => EXTEND_PATH . 'Workerman/workerman',
- 'GatewayWorker' =>EXTEND_PATH . 'Workerman/gateway-worker/src',
- ]);
只要确保文件加载正常,后续操作就是将 Register,BusinessWorker和Gateway 初始化,运行即可;
2 $worker->eventHandler,设定处理业务的 controller,tp5使用命名空间,此处同样需要填写完整的命名空间;
thinkphp5集成GatewayWorker的更多相关文章
- ThinkPHP5集成JS-SDK实现微信自定义分享功能
		最近开发一个项目,需要将链接分享给好友时能够自定义标题.简介和logo,现将ThinkPHP5集成JS-SDK实现微信自定义分享功能的过程整理成文. 一.准备工作 1.认证的公众号 不管是订阅号还是服 ... 
- thinkphp5集成H-ui后台(五)集成webUploader
		在所有的编程语言中,都有对文件上传处理的知识点,这里不多赘述.在H-ui中,有一个功能强大的文件上传组件webUploader,今天就来说明和集成一下它. 先看一下webUploader集成后的效果: ... 
- thinkphp5集成微信支付【公众号支付】快捷路径
		1 下载官方的测试用例PHP版 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 2 到vendor目录新建weixin文件夹 ... 
- TODO:macOS上ThinkPHP5和Semantic-UI集成
		TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ... 
- PHP/ThinkPHP5 框架集成微博登录入库流程示意
		PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ... 
- thinkphp5+GatewayWorker+Workerman
		项目地址 ttps://www.workerman.net/workerman-chat thinkphp5+GatewayWorker+Workerman聊天室,可以多人聊天,指定某个人进行聊天, ... 
- thinkphp5网站中集成使用支付宝手机支付接口
		今天以thinkphp5中使用支付宝的手机支付接口为例. 一.创建基本页面pay/alipay_wap_submit.php(开始创建订单) <!DOCTYPE html> <htm ... 
- 吐槽THINKPHP5命令行
		thinkphp,作为国内开源框架,一直在使用和学习. 但是实在忍不住想要吐槽一下他的开发文档,和 对初学者的不友好,建议刚接触MVC思想的人 还是尽量去使用其他框架当入门. 现在来吐槽一下think ... 
- 使用Composer安装ThinkPHP5
		1.Windows 系统,下载并运行 Composer-Setup.exe. 2.安装compose.PHP采用的是wampserver集成开发环境(这也之后的问题埋下伏笔). 3.然后在命令行下面, ... 
随机推荐
- DPDK Mempool 库原理(学习笔记)
			1 前置知识点学习(了解) 从CPU到实际的存储节点,依据层级划分:Channel > DIMM > Rank > Chip > Bank > Row /Column 1 ... 
- SSD1306(OLED驱动芯片)指令详解
			基础命令: 1.页地址模式下设置列起始地址低位(Set Lower Column Start Address For Page Addressing Mode)(00h~0Fh) 此指令用于在页地址模 ... 
- Mac更新系统后提示xcrun error
			更新mac os后无法运行git,gcc等命令,出现missing xcrun错误. 这是因为更新系统后会卸载xcode,重新安装后会缺失xcode的命令行工具(command line tools) ... 
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)
			在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot ... 
- Java——关键字和保留字
			Java关键字50个 abstract assert boolean break byte case catch char class const continue default do double ... 
- Java中异常分类和Throw和Throws的区别
			Java中异常分类和Throw和Throws的区别 1.异常分类 Throwable是Java中所有错误和异常的超类.它的下一级是Error和Exception 1.1 Error(错误) Error ... 
- centOS 6.8下使用Gparted进行分区扩容
			centOS 6.8下使用Gparted进行分区扩容  机器环境:windows上运行的VMware虚拟机,系统为centOS 6.8.  由于前期分区分配空间过小,无法满足后续的数据存储预期,所 ... 
- 面向对象案例 - 学生信息管理系统V1.0
			学生管理系统项目[所有知识点整合] 1. 学生管理系统项目 尝试完成以下功能 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的 ... 
- R 语言
			ps 帮人学习R语言代码: 定义变量 alldata<-c(32.56,1.4072,28.94,0.231,11.005,2.48713,40.33,1.5334,34.79,0.288,18 ... 
- undefined attribute name (XXXX)
			Window --> Preferences --> Web --> HTML Files --> Editor --> Validation --> Attrib ... 
