安裝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
也可以通過寶塔守護進程啟動