ホームページ >PHPフレームワーク >Workerman >Laravelでworkermanにアクセスする方法について話しましょう

Laravelでworkermanにアクセスする方法について話しましょう

青灯夜游
青灯夜游転載
2022-12-07 19:21:432107ブラウズ

laravel websocket はインスタント メッセージング開発に不可欠なツールですが、Laravel で workerman にアクセスするにはどうすればよいでしょうか?以下の記事ではlaravelでWebSocketに素早くアクセスする方法を紹介しますので、ご参考になれば幸いです。

Laravelでworkermanにアクセスする方法について話しましょう

まえがき: ここでは、workerman に基づいて開発された GatewayWorker をソケットのコア コンポーネントとして使用します。これは、他の GatewayWorker と比較すると、workerman は純粋なソケット クラス ライブラリであるためです。つまり、より基本的なものであり、開発者にはマルチプロセス プログラミングの経験が必要です。当社の開発者のほとんどは IM、ゲームなどに Workerman を使用しており、より高速で強力な Gateway Worker に基づいて直接開発されています。

1.gateway-worker をインストールします

composer require workerman/gateway-worker -vvv

2.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;);
    }
}

3. リスニング イベントを作成する

監視する 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)
    {
    }
}

4. Workerman を起動します

コマンドラインで実行しますサポートされるコマンドは start | stop | restart に -d を追加します. ガーディアン モード [デーモン]

php artisan workman start -d

5. 落とし穴を避けるための重要なポイント

1. LINUX 環境で使用します。

2. 起動に失敗する場合がありますので、PHP で pcntl で始まる関連メソッドが無効になっていないか確認してください。 PHP 構成ファイルで disable_functions を見つけて、pcntl で始まるすべてのメソッドを削除します。

6. GatewayWorker マニュアル

gateway-worker マニュアル

プログラミング関連の知識の詳細については、次のサイトを参照してください: プログラミング教育! !

以上がLaravelでworkermanにアクセスする方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。