thinkphp5.1 使用gateway-worker

news/2024/12/30 2:07:28/

**

1. 安装workerman/gateway-worker

**

composer require workerman/gateway-worker

2.根目录创建server.php

<?phpnamespace think;
require __DIR__ . '/thinkphp/base.php';
Container::get('app')->bind('worker/server')->run()->send();

3.创建启动文件app\worker\controller\server.php

默认demo 无法使用tp中的类,这里就自己写了
gatewayworker中的所有类方法全部放到这里

<?phpnamespace app\worker\controller;use GatewayWorker\Gateway;
use \Workerman\Worker;
use \GatewayWorker\BusinessWorker;
use \GatewayWorker\Register;class Server
{public function __construct(){if (strpos(strtolower(PHP_OS), 'win') === 0) {exit("start.php not support windows, please use start_for_win.bat\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");}$this->startGateWay();$this->startBusinessWorker();$this->startRegister();Worker::runAll();}public function startGateWay(){// wss服务$context = [];// gateway 进程,这里使用Text协议,可以用telnet测试$gateway = new Gateway('websocket://0.0.0.0:1236', $context);// gateway名称,status方便查看$gateway->name = 'HsxGateWay';// gateway进程数$gateway->count = 4;// 本机ip,分布式部署时使用内网ip$gateway->lanIp = '127.0.0.1';// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口$gateway->startPort = 4000;// 服务注册地址$gateway->registerAddress = '127.0.0.1:1238';// 心跳间隔$gateway->pingInterval = 55;$gateway->pingNotResponseLimit = 1;}public function startBusinessWorker(){// businessWorker 进程$worker = new BusinessWorker();// worker名称$worker->name = 'HsxBusiness';// businessWorker进程数量$worker->count = 4;// 服务注册地址$worker->registerAddress = '127.0.0.1:1238';// 命名空间$worker->eventHandler = 'app\worker\controller\events';}public function startRegister(){// register 必须是text协议$register = new Register('text://0.0.0.0:1238');}
}

4.业务逻辑,只需关注这一个文件即可

<?phpnamespace app\worker\controller;use GatewayWorker\Lib\Gateway;
use think\facade\Env;class Events
{/*** 当客户端连接时触发*/public static function onConnect($clientId){}/*** 当客户端发来消息时触发*/public static function onMessage($clientId, $message){// 这里可以使用tp中的Env了Gateway::sendToClient($clientId, $message . Env::get('APP.API_URL'));}/*** 当用户断开连接时触发*/public static function onClose($clientId){}
}

使用过程中有什么问题欢迎反馈

目前还没发现问题,一切运行正常

创作不易,转载请标明出处


http://www.ppmy.cn/news/176740.html

相关文章

tp5支付宝支付

ThinkPHP5 支付宝支付扩展库&#xff0c; 包括手机网站支付、电脑网站支付、支付查询、退款、退款查询、对账单等。 可以在GitHub下载&#xff1a; https://github.com/dream2023/ThinkPHP5-alipay 下载完成解压之后如下 打开application文件夹 把common复制到自己项目的app…

tp6/thinkphp6框架如何接入微信提现零钱功能

微信APP支付提现功能是我们常用的一个功能&#xff0c;接下来我们来对接APP的微信提现 业务范围 1.各类APP的提现功能为用户创造提现收益等 微信支付流程 1.选择接入模式 &#xff08;商户平台申请&#xff09;成为普通商户 2.参数申请 开放平台申请APPID &#xff0c;商户号…

TP5上传

说道上传&#xff0c;图片上传是最常见的了。比如商城的商品列表页&#xff0c;都有一堆商品提供大家看来让大家参考。有一些网站的新闻都会有缩略图让大家预览。所以为了方便需求&#xff0c;tp也专门做了一个上传相关的功能。 关于模板方面还是要啰嗦一下 <form action&…

tp5(thinkphp 5)后端开发

编译环境 php 7.3.29&#xff0c;windows可能需要找个教程安装一下&#xff0c; macOs系统自带apache&#xff0c;只需要把 /etc/apache2 路径下的 httpd.conf 关于php的配置的注释取消掉即可。 依赖包管理器&#xff1a;composer&#xff0c;安装教程,常用命令 创建工程命令&…

TP5 小知识(5.1.x)

tp5 路由相关: Route::domain(api.com, api); # 路由1 Route::get(v1/users/recordDetail,api/v1.users/recordDetail); # 路由2 Route::get(v1/users/recordDetail,v1.users/recordDetail); 域名已经绑定模块的前提下&#xff1a; 路由1中 又绑定了模块&#xff0c;这个时候…

TP5.1使用webservice

TP5.1开启webservice 第一步&#xff1a;开启soap扩展第二步&#xff1a;编写文件第三步&#xff1a;启动webservice 第一步&#xff1a;开启soap扩展 php.ini 文件里面 找到 extensionsoap 把前面的分号注释 第二步&#xff1a;编写文件 注&#xff1a;所有文件都放到publi…

tp5 请求接口报500问题解决

公司最近thinkphp 5.0开发的项目需要新增需求&#xff0c;本地用wamp64启动项目&#xff0c;结果是正常启动起来了&#xff0c;资源都请求到了&#xff0c;但是调用后台接口一直报500&#xff0c;百思不得其解&#xff0c;html中断点也打了&#xff0c;后台php接口断点也排查不…

关于tp5上传

上传出错 public function upload(Request $request){var_dump($_FILES);// 获取表单上传文件$files $request->file(file);$item [];foreach ($files as $file ) {// 移动到框架应用根目录/public/uploads/ 目录下并且设置不覆盖$info $file->validate()->move(R…