Home  >  Article  >  PHP Framework  >  Let’s talk about how to access workerman in Laravel

Let’s talk about how to access workerman in Laravel

青灯夜游
青灯夜游forward
2022-12-07 19:21:431930browse

laravel websocket is an essential tool for instant messaging development, so how to access workerman in Laravel? The following article will introduce to you how to quickly access websocket in laravel. I hope it will be helpful to you.

Let’s talk about how to access workerman in Laravel

Preface: Here, we use GatewayWorker developed based on workerman as the core component of socket, because workerman is a pure socket class library, compared to GatewayWorker In other words, it is more basic and requires developers to have multi-process programming experience. Most of our developers use Workerman for IM, games, etc., and are directly developed based on Gateway Worker, which is faster and stronger.

1. Install gateway-worker

composer require workerman/gateway-worker -vvv

2. Create Workerman startup file

Through the following command, Create a command line file under App\Console\Commands and copy the following code into the file. [Related recommendations: "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. Create a listening event

Create an app/Events.php file to monitor and process Various events of 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. Start Workerman

Execute in the command line. The supported commands are start | stop | restart, and then add -d. It is the guardian mode [daemon]

php artisan workman start -d

5. Key points to avoid pitfalls

1. Use it in LINUX environment.

2. The startup may fail. In this case, please check whether the related methods starting with pcntl are disabled in PHP. Find disable_functions in the php configuration file and delete all methods starting with pcntl.

6. GatewayWorker Manual

gateway-worker Manual

For more programming-related knowledge, please visit: Programming teaching! !

The above is the detailed content of Let’s talk about how to access workerman in Laravel. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:csdn.net. If there is any infringement, please contact admin@php.cn delete