# workerman + laravel ## composer require workerman/gateway-worker ## composer require workerman/workerman ## 操作 ### 可以使用如下命令 - php artisan workman start :启动 - php artisan workman stop:停止 - php artisan workman restart:重启 - php artisan workman reload:平滑重启 - php artisan workman status:查看状态 ### 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 = 'workman {action} {--d}'; protected $description = 'Start a Workerman server.'; public function handle() { global $argv; $action = $this->argument('action'); $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(); //work名称 $worker->name = 'BusinessWorker'; //businessWork进程数 $worker->count = 2; //服务注册地址 $worker->registerAddress = '127.0.0.1:1236'; //设置\App\Workerman\Events类来处理业务 $worker->eventHandler = \App\Workerman\Events::class; } private function startGateWay() { //gateway进程 $gateway = new Gateway("websocket://0.0.0.0:2346"); //gateway名称 status方便查看 $gateway->name = 'Gateway'; //gateway进程 $gateway->count = 2; //本机ip $gateway->lanIp = '127.0.0.1'; //内部通讯起始端口,如果$gateway->count = 4 起始端口为2300 //则一般会使用 2300,2301 2个端口作为内部通讯端口 $gateway->startPort = 2300; //心跳间隔 $gateway->pingInterval = 30; //客户端连续$pingNotResponseLimit次$pingInterval时间内不发送任何数据则断开链接,并触发onClose。 //我们这里使用的是服务端主动发送心跳所以设置为0 $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'); } } ``` ### app/Workerman/Events.php ``` namespace App\Workerman; use \GatewayWorker\Lib\Gateway; class Events { // businessWorker进程启动事件 public static function onWorkerStart($businessWorker) { } //连接事件 public static function onConnect($client_id) { // 向当前client_id发送数据 Gateway::sendToClient($client_id, "onConnect $client_id"); } //进程退出事件 public static function onWebSocketConnect($client_id, $data) { } //消息事件 public static function onMessage($client_id, $message) { // 向所有人发送 Gateway::sendToAll("$client_id onMessage said $message"); } // 连接断开事件 public static function onClose($client_id) { } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up