首頁 >php框架 >Workerman >聊聊Laravel中怎麼接入workerman

聊聊Laravel中怎麼接入workerman

青灯夜游
青灯夜游轉載
2022-12-07 19:21:432135瀏覽

laravel websocket是即時通訊開發必備利器,那麼Laravel中要怎麼接入workerman?以下這篇文章跟大家介紹一下laravel快速接入websocket的方法,希望對大家有幫助。

聊聊Laravel中怎麼接入workerman

前言:此處,我們採用基於workerman開發的GatewayWorker作為socket的核心元件,因為,workerman是一個純粹的socket類別庫,相對於GatewayWorker來說,更底層,更需要開發者有多進程的程式設計經驗,而我們大部分開發者使用workerman是為了做IM、或遊戲等,直接基於GatewayWorker開發,更快、更強。

一、安裝gateway-worker

composer require workerman/gateway-worker -vvv

 二、建立Workerman啟動檔案

透過下列指令,在App\Console\Commands下建立命令列文件,並將下方程式碼複製到檔案中。 【相關推薦:《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 = &#39;workman {action} {--d}&#39;; //执行该命令的方式
 
    protected $description = &#39;Start a Workerman server.&#39;;
 
    public function handle()
    {
        global $argv;
        $action = $this->argument(&#39;action&#39;);
 
        $argv[0] = &#39;wk&#39;;
        $argv[1] = $action;
        $argv[2] = $this->option(&#39;d&#39;) ? &#39;-d&#39; : &#39;&#39;; 
      // -d守护模式,不会因为关闭系统命令页面而被杀掉进程。 没有-d则关闭命令页面直接退出进程
 
        $this->start();
    }
 
    private function start()
    {
        $this->startGateWay();
        $this->startBusinessWorker();
        $this->startRegister();
        Worker::runAll();
    }
 
    private function startBusinessWorker()
    {
        $worker                  = new BusinessWorker();
        $worker->name            = &#39;BusinessWorker&#39;;
        $worker->count           = 1;
        $worker->registerAddress = &#39;127.0.0.1:1236&#39;;
        $worker->eventHandler    = \App\Events::class; //用作监听事件的文件
    }
 
    private function startGateWay()
    {
//因为小程序等一些平台,要求使用wss进行socket,所以,这里需要配置下wss
//此处的cert.pem和key.key是域名的证书文件
       $content = array(
            &#39;ssl&#39; => array(
                &#39;local_cert&#39; => public_path(&#39;cert.pem&#39;),
                &#39;local_pk&#39; => public_path(&#39;key.key&#39;),
                &#39;verify_peer&#39; => false
            )
        );
        $gateway = new Gateway("websocket://0.0.0.0:2346", $content);
        //如果不需要wss,则不用加入content这个参数
        $gateway->transport = &#39;ssl&#39;;//不需要wss,也不用加入这个参数。
        $gateway->name                 = &#39;Gateway&#39;;
        $gateway->count                = 1;
        $gateway->lanIp                = &#39;127.0.0.1&#39;;
        $gateway->startPort            = 2300;
        $gateway->pingInterval         = 30;
        $gateway->pingNotResponseLimit = 0;
         $data = array(
            &#39;type&#39; => &#39;heart&#39;
        );
        $gateway->pingData = json_encode($data, true);
        $gateway->registerAddress      = &#39;127.0.0.1:1236&#39;;
    }
 
    private function startRegister()
    {
        new Register(&#39;text://0.0.0.0:1236&#39;);
    }
}

三、建立監聽事件

建立一個app/Events.php檔案來監聽處理Workman的各種事件

<?php
 
namespace App\Workerman;
 
class Events
{
 
    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)
    {
    }
}

四、啟動workerman

在命令列裡面執行,支援的指令有start | stop | restart,後續加-d 的意思是守護模式【daemon】

php artisan workman start -d

五、踩坑關鍵點

1、在LINUX環境中使用。

2、有可能會啟動失敗,此時,請檢查php中,是否停用了pcntl開頭的相關方法。在 php設定檔中查找到disable_functions,將所有pcntl開頭的方法全部刪除。

六、GatewayWorker手冊

gateway-worker手冊

更多程式相關知識,請造訪:程式教學! !

以上是聊聊Laravel中怎麼接入workerman的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除