• 技术文章 >php框架 >Laravel

    分享关于laravel-octane的体验及压测

    藏色散人藏色散人2021-06-11 09:01:53转载80
    下面由laravel教程栏目给大家介绍laravel-octane 体验及压测,希望对需要的朋友有所帮助!

    laravel-octane 必须在 php8 之上运行,无奈本地的 Mamp 最高还是 php7,所以只能用 docker 跑一下啦。

    创建容器

    在本地开个docker工作目录,方便映射和编辑项目代码。

    mkdir ~/workspace/docker/ -p && cd ~/workspace/docker/
    
    docker run -it --name php8 \
    -v "$PWD":/exports/apps \
    -w /exports/apps --entrypoint="/bin/bash" \
    -p 8081:8081 \
    php:8.0.3-cli

    这里用 swoole 加持吧, roadrunner 没用过,后面再说。

    容器部署

    组件、依赖都在容器中解决

    # 登录容器
    docker exec -it php8 /bin/bash
    # 不更新拉不到安装包 fk
    apt-get update && apt-get upgrade
    apt-get install libzip-dev
    apt-get install apache2-utils
    apt-get install net-tools
    apt-get install inetutils-ping
    
    # 热加载用的 node chokidar 需要话可以安装npm
    apt-get install nodejs npm
    npm config set registry https://registry.npm.taobao.org
    
    # 在拉取 composer 包时需要 否则用 git 去拉源码那叫一个慢哟
    pecl install zip
    pecl install swoole
    echo extension=zip.so >> /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    echo extension=swoole.so >> /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    
    # 安装 pcntl octane 信号通信需要
    docker-php-ext-install pcntl
    docker-php-ext-install pdo_mysql
    
    php -m
    安装 composer
    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer
    composer --version
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    创建 laravel && octane
    composer create-project laravel/laravel --prefer-dist -vvv laravel_octane
    cd laravel_octane
    
    # 安装 octane
    composer require laravel/octane
    php artisan octane:install
    
    php artisan key:generate
    
    # .env
    # 数据库我用的宿主机的
    # mac 容器访问宿主机 mysql 使用 docker.for.mac.host.internal 即可
    DB_CONNECTION=mysql
    DB_HOST=docker.for.mac.host.internal
    DB_PORT=3306
    DB_DATABASE=laravel_octane
    DB_USERNAME=root
    DB_PASSWORD=123456
    启动服务

    --watch

    #需要热加载 --watch 请安装 npm && chokidar
    npm install chokidar
    php artisan octane:start --host="0.0.0.0" --port=8081 --workers=4 --max-requests=10000 --task-workers=10
    访问测试
    curl -XGET http://127.0.0.1:8081/
    压测代码

    诸位自取

    app/Http/Kernel.php 注释掉 throttle:api

            'api' => [
                // 'throttle:api',
                // \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],

    routes/api.php

    Route::any('/db', [\App\Http\Controllers\IndexController::class, 'db']);

    app/Http/Controllers/IndexController.php

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Models\Test;
    use Illuminate\Http\Request;
    
    class IndexController extends Controller
    {
        public function db()
        {
            $nameList  = ['james', 'lucy', 'jack', 'jessica', 'lily'];
            $hobbyList = ['football', 'basketball', 'swimming'];
    
            $name  = $nameList[array_rand($nameList)];
            $hobby = $hobbyList[array_rand($hobbyList)];
    
            if (mt_rand(0, 5) >= 2) {// 0-1读 2-5写
                $test        = new Test();
                $test->name  = $name;
                $test->age   = 18;
                $test->sex   = 1;
                $test->hobby = $hobby;
                $test->save();
                $data = ['id' => $test->id];
            } else {
                $data = Test::query()->where('hobby', $hobby)->first();;
            }
    
            return $data;
        }
    }

    app/Models/Test.php

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    /**
     * Class Test
     *
     * @package App\Models
     * @property int id
     * @property string name
     * @property int age
     * @property string sex
     * @property string hobby
     */
    class Test extends Model
    {
        use HasFactory;
    
        /**
         * @var string
         */
        protected $table = 'test';
    
        const CREATED_AT = null;
        const UPDATED_AT = null;
    }

    sql

    CREATE TABLE `test` (
      `id` int unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
      `age` int NOT NULL,
      `sex` char(1) COLLATE utf8mb4_general_ci NOT NULL,
      `hobby` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_hobby` (`hobby`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

    压测结果

    结果让我有些怀疑自我,暂不发,大家自行压测吧。

    以上就是分享关于laravel-octane的体验及压测的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:laravel
    上一篇:方案详解:使用laravel解决库存超出问题 下一篇:避坑!Laravel数据库迁移功能的一个坑
    第16期线上培训班

    相关文章推荐

    • laravel-admin怎么使用wang-editor富文本插件• Laravel Tinker是啥?怎么用?• 基于PHP Laravel,聊聊少写PHP "烂"代码的方法!!• 方案详解:使用laravel解决库存超出问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网