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.然后在命令行下面, ...
随机推荐
- Django项目文件
Django项目文件 Pycharm创建django项目: 创建一个有一个app01应用的jangotest项目: 创建步骤: pycharm左上角文件file①---->新建项目new pro ...
- hdu4746莫比乌斯反演进阶题
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others)Total S ...
- jdk编译java文件时出现:编码GBK的不可映射字符
出现此问题的几种解决办法: 1.cmd下使用javac编译java文件 如: javac test.java 解决办法:编译时加上encoding选项 javac -encoding UTF-8 te ...
- Visual Studio 2019 Professional 激活
Visual Studio 2019 Professional下载地址>https://visualstudio.microsoft.com/zh-hant/thank-you-download ...
- python运用 - log信息提取(知识: 遍历 | os )
运用到的python知识点: excel相关:https://www.cnblogs.com/yaner2018/p/11269873.html 字典: python字典的几种方式: 1)key值遍历 ...
- vue项目报错Missing space before function parentheses的问题
问题描述为——函数括号前缺少空格 导致原因主要是,使用eslint时,严格模式下,会报错Missing space before function parentheses的问题,意思是在方法名和刮号之 ...
- poi——读取excel数据
单元格类型 读取Excel数据 package com.java.test.poi; import java.io.File; import java.io.FileInputStream; impo ...
- 如何在npm发布轮子
我们在前端工程开发中通常使用npm这个包管理器来安装各种好用的轮子(当然也有用yarn的),不安分的码工就想,也发布一个试试,哪怕只是一个小时候滚的铁环而不是轮子. 首先,要在 npmjs官网注册自己 ...
- 【Gabor】基于多尺度多方向Gabor融合+分块直方图的表情识别
Topic:表情识别Env: win10 + Pycharm2018 + Python3.6.8Date: 2019/6/23~25 by hw_Chen2018 ...
- [COCOS2DX-LUA]0-001.利用ClippingNode实现放大镜功能
用过Iphone的都知道,Iphone在定位光标位置的时候会把内容进行放大,这样我们就能很快的把光标移动到指定的位置.那么在我们的Cocos2dX的游戏中,怎么可以实现这种功能呢.起先我就是想起了Ip ...