1. 安装 Workerman
composer require workerman/gateway-worker
2. 创建 Workerman 启动文件
php artisan make:command WorkermanCommand
<?php namespace App\Console\Commands; use GatewayWorker\BusinessWorker; use GatewayWorker\Gateway; use GatewayWorker\Register; use Illuminate\Console\Command; use Workerman\Worker; class WorkermanCommand extends Command { protected $signature = 'workerman {action} {--d}'; protected $description = 'Start a Workerman server.'; public function handle() { global $argv; $action = $this->argument('action'); // windows 下启动需要分开启动协议 if ($action === 'single') { $start = $this->option('start'); if ($start === 'register') { $this->startRegister(); } elseif ($start === 'gateway') { $this->startGateWay(); } elseif ($start === 'worker') { $this->startBusinessWorker(); } Worker::runAll(); return; } // $argv[0] = 'wk'; $argv[1] = $action; $argv[2] = $this->option('d') ? '-d' : ''; $this->start(); } private function start() { $this->startGateWay(); $this->startBusinessWorker(); $this->startRegister(); Worker::runAll(); } private function startBusinessWorker() { $worker = new BusinessWorker(); $worker->name = 'BusinessWorker'; $worker->count = 4; $worker->registerAddress = '127.0.0.1:1236'; $worker->eventHandler = \App\Services\WorkermanService::class; } private function startGateWay() { $gateway = new Gateway("websocket://0.0.0.0:9004"); $gateway->name = 'Gateway'; $gateway->count = 4; $gateway->lanIp = '127.0.0.1'; $gateway->startPort = 2300; $gateway->pingInterval = 30; $gateway->pingNotResponseLimit = 0; $gateway->pingData = '{"type":"@heart@"}'; $gateway->registerAddress = '127.0.0.1:1236'; } private function startRegister() { new Register('text://0.0.0.0:1236'); } }
3. 创建事件监听文件
创建文件 App\Services\WorkermanService.php ,也可以替换为其他文件,修改启动文件中的 eventHandler 即可
<?php namespace App\Services; class WorkermanService { public static function onWorkerStart($businessWorker) { } public static function onConnect($client_id) { } public static function onWebSocketConnect($client_id, $data) { } public static function onMessage($client_id, $message) { } public static function onClose($client_id) { } }
4. 启动 Workerman 服务端
php artisan workerman start --d
5. windows端 不能同时开启多个协议,必须要分开启动
php artisan workerman single --start=register php artisan workerman single --start=gateway php artisan workerman single --start=worker
6. 可以创建一个 bat 文件直接执行
start /b php artisan workerman single --start=register start /b php artisan workerman single --start=gateway start /b php artisan workerman single --start=worker pause
评论已关闭。