thinkphp6通过workerman使用websocket
安装workerman依赖
composer require topthink/think-worker
composer require topthink/think-worker=1.0.* # 指定兼容版本:ml-citation{ref="1,7" data="citationList"}
config配置
config/worker.php
<?php
return [// 扩展自身需要的配置'host' => '0.0.0.0', // 监听地址'port' => 2346, // 监听端口'root' => '', // WEB 根目录 默认会定位public目录'app_path' => '', // 应用目录 守护进程模式必须设置(绝对路径)'file_monitor' => false, // 是否开启PHP文件更改监控(调试模式下自动开启)'file_monitor_interval' => 2, // 文件监控检测时间间隔(秒)'file_monitor_path' => [], // 文件监控目录 默认监控application和config目录// 支持workerman的所有配置参数'name' => 'thinkphp','count' => 4,'daemonize' => false,'pidFile' => '',
];
config/gateway_worker.php
<?php
// +----------------------------------------------------------------------
// | yylAdmin 前后分离,简单轻量,免费开源,开箱即用,极简后台管理系统
// +----------------------------------------------------------------------
// | Copyright https://gitee.com/skyselang All rights reserved
// +----------------------------------------------------------------------
// | Gitee: https://gitee.com/skyselang/yylAdmin
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------
// | Workerman设置 仅对 php think worker:gateway 指令有效
// +----------------------------------------------------------------------
use GatewayWorker\Lib\Gateway;return [// 扩展自身需要的配置'protocol' => 'websocket', // 协议 支持 tcp udp unix http websocket text'host' => '0.0.0.0', // 监听地址'port' => 2348, // 监听端口'socket' => '', // 完整监听地址'context' => [], // socket 上下文选项'register_deploy' => env('WORKER.register_deploy', true), // 是否需要部署register'businessWorker_deploy' => true, // 是否需要部署businessWorker'gateway_deploy' => true, // 是否需要部署gateway'worker_class' => 'app\common\service\workman\Events', // 自定义Workerman服务类名 支持数组定义多个服务// Register配置'registerAddress' => env('WORKER.registerAddress', '127.0.0.1:1236'),// Gateway配置'name' => 'thinkphp','count' => 5,'lanIp' => env('WORKER.lanIp', '127.0.0.1'),'startPort' => 2000,'daemonize' => false,'pingInterval' => 30,'pingNotResponseLimit' => 0,'pingData' => '{"type":"ping"}',// BusinsessWorker配置'businessWorker' => ['name' => 'BusinessWorker','count' => 10,'eventHandler' => 'app\common\service\workman\Events','registerAddress' => array_unique([env('WORKER.registerAddress1', '127.0.0.1:1236'),env('WORKER.registerAddress2', '127.0.0.1:1236')]),],];
config/worker_server.php
<?php
return [// 扩展自身需要的配置'protocol' => 'websocket', // 协议 支持 tcp udp unix http websocket text'host' => '0.0.0.0', // 监听地址'port' => 2345, // 监听端口'socket' => '', // 完整监听地址'context' => [], // socket 上下文选项
// 'worker_class' => 'app\common\service\workman\Worker', // 自定义Workerman服务类名 支持数组定义多个服务// 支持workerman的所有配置参数'name' => 'thinkphp','count' => 4,'daemonize' => false,'pidFile' => '',// 支持事件回调// onWorkerStart'onWorkerStart' => function ($worker) {},// onWorkerReload'onWorkerReload' => function ($worker) {},// onConnect'onConnect' => function ($connection) {$connection->send('onConnect success: uid = ' . json_encode($connection->uid));},// onMessage'onMessage' => function ($connection, $data) {$connection->send('onMessage success data = ' . json_encode($data));},// onClose'onClose' => function ($connection) {},// onError'onError' => function ($connection, $code, $msg) {echo "error [ $code ] $msg\n";},
];
前端链接示例
const socket = new WebSocket('ws://127.0.0.1:2346');
socket.onopen = () => console.log('连接成功:ml-citation{ref="6" data="citationList"}');
socket.onmessage = e => console.log('收到:', e.data);
// 发送数据示例
socket.send(JSON.stringify({ type: 'chat', msg: 'Hello' })):ml-citation{ref="6,8" data="citationList"};
启动服务
php think worker start -d # 后台运行:ml-citation{ref="5,8" data="citationList"}
开启 php think worker:gateway
停止 php think worker:gateway stop
查看状态
php think worker:gateway status
也可以通过宝塔守护进程启动