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

thinkphp5集成GatewayWorker的更多相关文章

  1. ThinkPHP5集成JS-SDK实现微信自定义分享功能

    最近开发一个项目,需要将链接分享给好友时能够自定义标题.简介和logo,现将ThinkPHP5集成JS-SDK实现微信自定义分享功能的过程整理成文. 一.准备工作 1.认证的公众号 不管是订阅号还是服 ...

  2. thinkphp5集成H-ui后台(五)集成webUploader

    在所有的编程语言中,都有对文件上传处理的知识点,这里不多赘述.在H-ui中,有一个功能强大的文件上传组件webUploader,今天就来说明和集成一下它. 先看一下webUploader集成后的效果: ...

  3. thinkphp5集成微信支付【公众号支付】快捷路径

    1 下载官方的测试用例PHP版 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 2 到vendor目录新建weixin文件夹 ...

  4. TODO:macOS上ThinkPHP5和Semantic-UI集成

    TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...

  5. PHP/ThinkPHP5 框架集成微博登录入库流程示意

    PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ...

  6. thinkphp5+GatewayWorker+Workerman

    项目地址  ttps://www.workerman.net/workerman-chat thinkphp5+GatewayWorker+Workerman聊天室,可以多人聊天,指定某个人进行聊天, ...

  7. thinkphp5网站中集成使用支付宝手机支付接口

    今天以thinkphp5中使用支付宝的手机支付接口为例. 一.创建基本页面pay/alipay_wap_submit.php(开始创建订单) <!DOCTYPE html> <htm ...

  8. 吐槽THINKPHP5命令行

    thinkphp,作为国内开源框架,一直在使用和学习. 但是实在忍不住想要吐槽一下他的开发文档,和 对初学者的不友好,建议刚接触MVC思想的人 还是尽量去使用其他框架当入门. 现在来吐槽一下think ...

  9. 使用Composer安装ThinkPHP5

    1.Windows 系统,下载并运行 Composer-Setup.exe. 2.安装compose.PHP采用的是wampserver集成开发环境(这也之后的问题埋下伏笔). 3.然后在命令行下面, ...

随机推荐

  1. Java——日期格式化YYYYMMdd与yyyyMMdd的区别

    public static void main(String[] args) { //YYYY 是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年. //20 ...

  2. HashMap集合嵌套集合方法四种

    Map<String, HashMap<Person, String>> m=new HashMap<String, HashMap<Person, String& ...

  3. 透过面试题掌握Redis【持续更新中】

    本文已收录到1.1K Star的Github开源项目<面试指北>,想要了解更多内容,大家可以看一看这个项目,希望大家帮忙给一个star,谢谢了! <面试指北>项目地址:http ...

  4. Centos7无界面化启动

    Centos7无界面启动: 为了减少系统开销,有时候我们需要无图形界面启动linux(centos7) systemctl set-default multi-user.target (关闭图形界面) ...

  5. 5.CSS的引入方式

    CSS的三种样式表 按照CSS样式书写的位置(或者引入的方式),CSS的样式表可以分为三大类: 1.行内样式表(行内式) <div style="color:red: font-siz ...

  6. [Objective-C] 011_数据持久化_NSKeyedArchiver

    在日常开发中对于NSString.NSDictionary.NSArray.NSData.NSNumber这些基本类的数据持久化,可以用属性列表的方法持久化到.plist 文件中.但是一些我们自定义的 ...

  7. 01)原生php写一个小网站

    PHP留言板说明 1.帮朋友做一个毕业设计,本科大学生,都不知道框架是什么...只能原生PHP写了. 2.这里主要是做一个学习笔记. 3.项目开始会杂乱无章,慢慢整理. 需求 (1)用户注册:用户实现 ...

  8. 如何看待 HashiCorp 官宣,不允许中国境内使用其旗下产品?

    欢迎转载,欢迎看官推荐. 前言 HashiCorp 官方宣布,不允许中国境内使用.部署和安装该企业旗下的企业版产品和软件.该公司比较知名的产品有:Terraform.Consul.Vagrant 等. ...

  9. 01 . Mysql简介及部署

    Mysql数据库简介 什么是数据? ​ 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材,数据是信息的表现形式和载体,可以是符号,文字,数字,语音,图 ...

  10. 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三)

    上一篇(https://www.cnblogs.com/meowv/p/12974439.html)完成了全网各大平台的热点新闻数据的抓取,本篇继续围绕抓取完成后的操作做一个提醒.当每次抓取完数据后, ...