>  기사  >  PHP 프레임워크  >  Laravel에서 Workerman에 액세스하는 방법에 대해 이야기해 보겠습니다.

Laravel에서 Workerman에 액세스하는 방법에 대해 이야기해 보겠습니다.

青灯夜游
青灯夜游앞으로
2022-12-07 19:21:432031검색

laravel+websocket은 인스턴트 메시징 개발에 필수적인 도구인데 Laravel에서 workerman에 액세스하는 방법은 무엇입니까? 다음 글은 라라벨에서 웹소켓에 빠르게 접근하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다.

Laravel에서 Workerman에 액세스하는 방법에 대해 이야기해 보겠습니다.

서문: 여기서는 Workererman을 기반으로 개발된 GatewayWorker를 소켓의 핵심 구성 요소로 사용합니다. 왜냐하면 Workererman은 GatewayWorker보다 낮은 수준이고 개발자의 프로세스 프로그래밍 경험이 더 많은 순수 소켓 클래스 라이브러리이기 때문입니다. 그리고 대부분의 개발자들은 IM, 게임 등에 Workerman을 사용하고 있는데, 이는 더 빠르고 강력한 Gateway Worker를 기반으로 직접 개발한 것입니다.

1. Gateway-worker 설치

composer require workerman/gateway-worker -vvv

2. Workerman 시작 파일 생성

다음 명령을 사용하여 AppConsoleCommands 아래에 명령줄 파일을 생성하고 아래 코드를 파일에 복사합니다. [관련 추천: "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. 청취 이벤트 생성

다양한 Workman 이벤트를 수신하고 처리할 수 있는 app/Events.php 파일을 생성하세요

<?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입니다.

2. 이 경우에는 pcntl

으로 시작하는 관련 메소드가 비활성화되어 있는지 확인하세요. PHP 구성 파일에서 비활성화 기능을 찾아

pcntl으로 시작하는 모든 메소드를 삭제하세요. 6. GatewayWorker 매뉴얼

gateway-worker 매뉴얼

프로그래밍 관련 지식을 더 보려면

프로그래밍 교육

을 방문하세요! !

위 내용은 Laravel에서 Workerman에 액세스하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제