Heim  >  Artikel  >  PHP-Framework  >  Lassen Sie uns darüber sprechen, wie Sie in Laravel auf Workerman zugreifen können

Lassen Sie uns darüber sprechen, wie Sie in Laravel auf Workerman zugreifen können

青灯夜游
青灯夜游nach vorne
2022-12-07 19:21:432006Durchsuche

laravel+websocket ist ein wesentliches Tool für die Instant-Messaging-Entwicklung. Wie kann man also in Laravel auf workerman zugreifen? Im folgenden Artikel erfahren Sie, wie Sie in Laravel schnell auf den Websocket zugreifen.

Lassen Sie uns darüber sprechen, wie Sie in Laravel auf Workerman zugreifen können

Vorwort: Hier verwenden wir GatewayWorker, der auf Workererman basiert, als Kernkomponente von Socket, da Workerman eine reine Socket-Klassenbibliothek ist, die niedriger ist als GatewayWorker und mehr Kenntnisse von Entwicklern in der Prozessprogrammierung erfordert. und die meisten unserer Entwickler verwenden Workerman für IM, Spiele usw., das direkt auf Basis von Gateway Worker entwickelt wurde, das schneller und stärker ist.

1. Gateway-Worker installieren

composer require workerman/gateway-worker -vvv

2. Workerman-Startdatei erstellen

Verwenden Sie den folgenden Befehl, um eine Befehlszeilendatei unter AppConsoleCommands zu erstellen und kopieren Sie den folgenden Code in die Datei. [Verwandte Empfehlungen: „workerman Tutorial“]

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. Erstellen Sie eine app/Events.php-Datei, um verschiedene Workman-Ereignisse abzuhören und zu verarbeiten
<?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)
    {
    }
}

Ausführen in der Befehlszeile sind die unterstützten Befehle start |.

2. Der Start kann in diesem Fall fehlschlagen. Überprüfen Sie bitte, ob die entsprechenden Methoden, die mit pcntl

beginnen, in PHP deaktiviert sind. Suchen Sie „disable_functions“ in der PHP-Konfigurationsdatei und löschen Sie alle Methoden, die mit

pcntl beginnen. 6. GatewayWorker-Handbuch !

Das obige ist der detaillierte Inhalt vonLassen Sie uns darüber sprechen, wie Sie in Laravel auf Workerman zugreifen können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen