Maison  >  Article  >  cadre php  >  Partagez votre expérience et test de résistance sur laravel-octane

Partagez votre expérience et test de résistance sur laravel-octane

藏色散人
藏色散人avant
2021-06-09 15:13:343426parcourir

Ce qui suit est une introduction à l'expérience laravel-octane et au test de stress de la colonne tutorielle laravel. J'espère que cela sera utile aux amis dans le besoin !

laravel-octane doivent être exécutés au-dessus de php8, mais le Mamp local est le plus élevé toujours php7, donc je ne peux utiliser docker que pour courir.

Créez un conteneur

Ouvrez un docker répertoire de travail localement pour faciliter le mappage et l'édition du code du projet.

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

Utilisez swoole ici pour la bénédiction, roadrunner n'a pas été utilisé auparavant, nous en reparlerons plus tard.

Déploiement de conteneurs

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

# 登录容器
docker exec -it php8 /bin/bash
rrree
Installer composer
# 不更新拉不到安装包 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
Créer Laravel && octane
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/
Démarrer le service

--watch

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 请安装 npm && chokidar
npm install chokidar
Test d'accès
php artisan octane:start --host="0.0.0.0" --port=8081 --workers=4 --max-requests=10000 --task-workers=10
Code du test de stress

Vous pouvez l'obtenir vous-même

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

curl -XGET http://127.0.0.1:8081/

routes/api.php

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

app/Http/Controllers/IndexController.php

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

app/Models/Test.php

<?php

namespace App\Http\Controllers;

use App\Models\Test;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    public function db()
    {
        $nameList  = [&#39;james&#39;, &#39;lucy&#39;, &#39;jack&#39;, &#39;jessica&#39;, &#39;lily&#39;];
        $hobbyList = [&#39;football&#39;, &#39;basketball&#39;, &#39;swimming&#39;];

        $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;
    }
}

sql

<?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;
}

Résultat du test de stress

Le résultat est que j'ai quelques doutes sur moi-même, donc je ne le publierai pas pour l'instant, afin que chacun puisse le tester par lui-même.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer