1.安裝Workerman
首先在laravel根目錄下安裝Workerman
命令:$ composer require workerman/gateway-worker
2.創建 Workerman 啟動文件
創建一個 artisan 命令行工具來啟動 Socket 服務端,在 app/Console/Commands 目錄下建立命令行文件。
<?php
namespaceApp\Console\Commands;useGatewayWorker\BusinessWorker;useGatewayWorker\Gateway;useGatewayWorker\Register;useIlluminate\Console\Command;useWorkerman\Worker;classWorkermanCommandextendsCommand{protected$signature='workman {action} {--d}';protected$description='Start a Workerman server.';publicfunctionhandle(){global$argv;$action=$this->argument('action');$argv[0]='wk';$argv[1]=$action;$argv[2]=$this->option('d')?'-d':'';$this->start();}privatefunctionstart(){$this->startGateWay();$this->startBusinessWorker();$this->startRegister();Worker::runAll();}privatefunctionstartBusinessWorker(){$worker=newBusinessWorker();$worker->name='BusinessWorker';$worker->count=1;$worker->registerAddress='127.0.0.1:1236';$worker->eventHandler= \App\Workerman\Events::class;}privatefunctionstartGateWay(){$gateway=newGateway("websocket://0.0.0.0:2346");$gateway->name='Gateway';$gateway->count=1;$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';}privatefunctionstartRegister(){newRegister('text://0.0.0.0:1236');}}
3.創建事件監聽文件
創建一個 app/Workerman/Events.php 文件來監聽處理 workman 的各種事件。
<?php
namespaceApp\Workerman;classEvents{publicstaticfunctiononWorkerStart($businessWorker){}publicstaticfunctiononConnect($client_id){}publicstaticfunctiononWebSocketConnect($client_id,$data){}publicstaticfunctiononMessage($client_id,$message){}publicstaticfunctiononClose($client_id){}}
4. 啟動 Workerman 服務端
在命令行里面執行,支持的命令大概有 start|stop|restart,其中 -d 的意思是 daemon 模式。
$ php artisan workman start -d
當你看到如下結果的時候,workman 已經啟動成功了。
Workerman[wk] start in DEBUG mode
-----------------------WORKERMAN----------------------------- Workerman version:3.5.11PHP version:7.1.11------------------------WORKERS------------------------------- user worker listen processes status root Gateway websocket://0.0.0.0:2346 1 [OK] root BusinessWorker none 1[OK] root Register text://0.0.0.0:1236 1 [OK]---------------------------------------------------------------- Press Ctrl+C to stop. Start success. onWorkerStart
<?phpnamespaceApp\Console\Commands;useGatewayWorker\BusinessWorker;useGatewayWorker\Gateway;useGatewayWorker\Register;useIlluminate\Console\Command;useWorkerman\Worker;classWorkermanCommandextendsCommand{protected$signature='workman {action} {--d}';protected$description='Start a Workerman server.';publicfunctionhandle(){global$argv;$action=$this->argument('action');$argv[0]='wk';$argv[1]=$action;$argv[2]=$this->option('d')?'-d':'';$this->start();}privatefunctionstart(){$this->startGateWay();$this->startBusinessWorker();$this->startRegister();Worker::runAll();}privatefunctionstartBusinessWorker(){$worker=newBusinessWorker();$worker->name='BusinessWorker';$worker->count=1;$worker->registerAddress='127.0.0.1:1236';$worker->eventHandler= \App\Workerman\Events::class;}privatefunctionstartGateWay(){$gateway=newGateway("websocket://0.0.0.0:2346");$gateway->name='Gateway';$gateway->count=1;$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';}privatefunctionstartRegister(){newRegister('text://0.0.0.0:1236');}}