当前位置: 首页 > 工具软件 > LaravelS > 使用案例 >

laravels插件安装与配置

公德明
2023-12-01

laravels是一个插件,用于快速集成swoole到laravel,然后赋予他们更好的性能。

安装第一步:

环境要求
PHP >= 5.5.9
Swoole >= 1.7.19
larael >= 5.1
环境查看:
php -v
cc -v
openssl version
php --ri swoole
安装swoole

sudo wget https://github.com/swoole/swoole-src/archive/v4.0.4.zip
sudo  unzip v4.0.4.zip

*** 如果没有unzip,先安装    sudo apt install unzip   再  sudo  unzip v4.0.4.zip

cd swoole-src-4.0.4    (进入解压包)
sudo phpize

***如果没有phpize  先安装  sudo apt-get install php7.1-dev  再    sudo phpize

sudo ./configure
sudo make
sudo make install

安装成功后,在php中加入so
位置 /etc/php/7/1/cli/php.ini
添加配置 extension=swoole.so

检查版本 php --ri swoole

安装Laravels

1.在你的laravel项目的根目录下执行

composer require "hhxsv5/laravel-s:~3.0" -vvv

2.注册Service Provider
Laravel 修改文件config/app.php,laravel5.5+支持包自动发现,你应该跳过这步

  'providers' => [
            Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class,
        ],

3.发布配置文件,每次升级LaravelS后,建议重新发布一次配置文件

 php artisan laravels publish

4.修改配置config/laravels.php:监听的IP、端口等。
5.运行

php artisan laravels {start|stop|restart|reload|publish}
命令说明
start启动LaravelS,展示已启动的进程列表 ps -ef
stop停止LaravelS
restart重启LaravelS
reload平滑重启所有worker进程,这些worker进程内包含你的业务代码和框架(Laravel/Lumen)代码,不会重启master/manger进程
publish发布配置文件到你的项目中config/laravels.php

运用

首先,用laravel指令创建job

php artisan make:job Test

然后,修改接口

<?php

namespace App\Jobs;

use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class Test extends Task
{
    //处理任务数据
    private $data;
    //任务处理结果
    private $result;
    public $delay;
    
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instanceH
     *
     * @return void
     */
    public function __construct($data)
    {
        //
        $this->data=$data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
     // 处理任务的逻辑,运行在Task进程中,不能投递任务
    public function handle()
    {
        //
        var_dump(self::class);
        echo "待处理的异步任务$this->data".PHP_EOL;
        sleep(5);  // 模拟一些慢速的慢速的处理
        // 此处抛出的异常会被上层捕获并记录到Swoole日志,开发者需要手动try/catch
        $this->result='result of'.$this->data.'操作结果';
        return '123';
    }
    
    public function finish(){
        return "操作完成的结果$this->result".PHP_EOL;
    }
}

最后路由调用,

Route::get('aaa',function (){
    $task = new App\Jobs\Test('测试winner异步任务');
    $suceess = Hhxsv5\LaravelS\Swoole\Task\Task::deliver($task);
    //异步投递任务,出发调用任务类的handle方法
    var_dump($suceess);
});

一些错误

首先确定config下面的laravels配置问题

    'swoole' => [
        'daemonize'          => env('LARAVELS_DAEMONIZE', false),
        'dispatch_mode'      => env('LARAVELS_DISPATCH_MODE', 2),
        'reactor_num'        => env('LARAVELS_REACTOR_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() : 8),
        'worker_num'         => env('LARAVELS_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() * 4 : 8),
        //异步任务处理能力
        'task_worker_num'    => env('LARAVELS_TASK_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() * 4 : 8),
        'task_ipc_mode'      => 1,
        'task_max_request'   => env('LARAVELS_TASK_MAX_REQUEST', 100000),
        'task_tmpdir'        => @is_writable('/dev/shm/') ? '/dev/shm' : '/tmp',
        'max_request'        => env('LARAVELS_MAX_REQUEST', 100000),
        'open_tcp_nodelay'   => true,
        'pid_file'           => storage_path('laravels.pid'),
        'log_level'          => 4,
        'log_file'           => storage_path(sprintf('logs/swoole-%s.log', date('Y-m'))),
        'document_root'      => base_path('public'),
        'buffer_output_size' => 2 * 1024 * 1024,
        'socket_buffer_size' => 8 * 1024 * 1024,
        'package_max_length' => 4 * 1024 * 1024,
        'reload_async'       => true,
        'max_wait_time'      => 60,
        'enable_reuse_port'  => true,
        'enable_coroutine'   => false,
        'upload_tmp_dir'     => @is_writable('/dev/shm/') ? '/dev/shm' : '/tmp',
        'http_compression'   => false,
    ],

再来是,确认修改代码后是否有重启laravels。有其他错误可以留言我哦!!!!

 类似资料: