Heim > PHP-Framework > Laravel > Teilen Sie Ihre Erfahrungen und Ihren Stresstest zu Laravel-Octan

Teilen Sie Ihre Erfahrungen und Ihren Stresstest zu Laravel-Octan

藏色散人
Freigeben: 2021-06-11 09:01:53
nach vorne
3530 Leute haben es durchsucht

Die folgende Tutorial-Kolumne von laravel stellt Ihnen die Laravel-Octane-Erfahrung und den Stresstest vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!

laravel-octane muss auf php8 ausgeführt werden, aber der lokale Mamp hat das höchster Wert Es ist immer noch php7, daher kann ich es nur mit docker ausführen. 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
Nach dem Login kopieren

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

容器部署

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

# 登录容器
docker exec -it php8 /bin/bash
Nach dem Login kopieren
# 不更新拉不到安装包 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
Nach dem Login kopieren
安装 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/
Nach dem Login kopieren
创建 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
Nach dem Login kopieren
启动服务

--watch

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

诸位自取

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

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

routes/api.php

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

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  = [&#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;
    }
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

sql

Erstellen Sie einen Container.

Öffnen Sie lokal ein docker-Arbeitsverzeichnis, um das Zuordnen und Bearbeiten von Projektcode zu erleichtern.

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
Nach dem Login kopieren
Verwenden Sie swoole hier, um es zu unterstützen. roadrunner wurde später nicht verwendet.

Container-Bereitstellung

Komponenten und Abhängigkeiten werden alle im Container aufgelöst🎜rrreeerrreee
Composer installieren
rrreee
Laravel && Octane erstellen
rrreee
Starten Der Dienst
🎜--watch🎜rrreeerrreee
Zugriffstest
rrreee
Stresstest-Code
🎜Sie können ihn selbst durchführen🎜🎜app/Http/ Kernel.php auskommentierendrossel:api🎜rrreee🎜routes/api.php🎜rrreee🎜app/Http/Controllers/IndexController.php🎜rrreee🎜app/Models/Test.php🎜rrreee🎜sql🎜rrreee🎜Stresstest-Ergebnisse🎜🎜Die Ergebnisse lassen mich ein wenig an mir selbst zweifeln, also habe ich gewonnen. Um sie vorerst nicht zu veröffentlichen, kann jeder selbst einen Stresstest durchführen. 🎜🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonTeilen Sie Ihre Erfahrungen und Ihren Stresstest zu Laravel-Octan. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage