安装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
也可以通过宝塔守护进程启动