Используйте swoole для замены nginx в качестве http-сервера в Laravel

PHP Laravel

1. Что ограничивает скорость фреймворка Laravel?

Когда фреймворк Laravel запущен, ему нужно загрузить много файлов, и его знаменитая экологическая среда хороша, поэтому в процессе разработки мы обнаружим, что было построено много колес, что делает Laravel стартовым. Дисковый ввод-вывод очень высокий (то есть для загрузки большого количества файлов), предыдущий блог блоггераСоветы по оптимизации производительности фреймворка Laravel5В статье также упоминаются некоторые оптимизации, но существенного решения проблемы высокого дискового ввода-вывода нет.

Теперь, когда вы знаете проблему, ее легко решить, если вы не перезагружаете эти файлы каждый раз, когда запускаете Laravel, и на сцене появляется знаменитый swoole.

 

2.Swoole

Swoole утверждает, что переопределяет PHP.Это расширение PHP, которое позволяет выполнять PHP асинхронно, как узел, а также может использовать сокеты для предоставления PHP серии асинхронных операций ввода-вывода, управляемых событиями и параллельных структур данных. функции. Swoole может широко использоваться в Интернете, мобильной связи, корпоративном программном обеспечении, облачных вычислениях, онлайн-играх, Интернете вещей (IOT), Интернете транспортных средств, умном доме и других областях. Это может значительно улучшить производительность проекта.

 

3. Используйте Swoole для повышения производительности Laravel

В существующих колесах я чувствую, что следующие два все еще очень хороши, вы можете выбрать сами

Блогер выбрал первое, не спрашивайте почему, своенравный! Тогда давайте начнем!

Используйте монтаж композитора:

composer require swooletw/laravel-swoole

Если вы используете laravel, добавьте в массив провайдеров в config/app.php

SwooleTW\Http\LaravelServiceProvider::class,

Если вы используете lumen, добавьте следующий код в bootstrap/app.php

 $app->register(SwooleTW\Http\LumenServiceProvider::class); 

Экспорт файла конфигурации в каталог конфигурации

 php artisan vendor:publish --provider="SwooleTW\Http\HttpServiceProvider"

Затем вы можете перейти к config/swoole_http.php для настройки информации

'server' => [
        'host' => env('SWOOLE_HTTP_HOST', '127.0.0.1'),
        'port' => env('SWOOLE_HTTP_PORT', '1215'),
        'options' => [
            'pid_file' => env('SWOOLE_HTTP_PID_FILE', base_path('storage/logs/swoole_http.pid')),
            'log_file' => env('SWOOLE_HTTP_LOG_FILE', base_path('storage/logs/swoole_http.log')),
            'daemonize' => env('SWOOLE_HTTP_DAEMONIZE', 1),
        ],
],

Излишне говорить, что хост и публикация, конкретная конфигурация в параметрах может перейти кофициальный сайтПросмотр подробной информации о параметрах.

swoole_http.php также настроен для предоставления массива провайдеров,

'providers' => [
    // App\Providers\AuthServiceProvider::class,
]

Потому что после использования swoole как http эти провайдеры будут храниться в памяти, поэтому вот провайдеры, которые нужно перерегистрировать и перезапустить для каждого запроса.

Artisan Commands

Это колесо управляется полностью с помощью ремесленных команд.

 php artisan swoole:http start|stop|restart|reload 

По очереди запускать/останавливать/перезапускать/перезагружать.

Итак, мы можем запустить его с помощью следующей командыswoole_http_server

php artisan swoole:http start

Теперь вы можете получить доступ к Laravel через хост и порт в файле конфигурации, например, моя конфигурация: 127.0.0.1:1215

Уведомление: Это расширение не поддерживает тепловой запуск, поэтому вам придется перезапускать службу PHP Artisan Swoole: HTTP Restart каждый раз, когда у вас есть обновления кода. Конечно, вы также можете написать скрипт в Linux для автоматического перезапуска службы после нажатия git.

 

4. Тест производительности

Давайте посмотрим на две картинки ниже.

Перед использованием swoole:

После использования swoole:

 

Вот инструмент тестирования ab с использованием Apache

ab -n1000 -c10 http://127.0.0.1:1215

Мы можем быть удивлены, обнаружив, что количество запросов в секунду увеличилось с более чем 20 до более чем 600. Рост почти в 30 раз. Ах, как больно это понимать! !

 

5. Используйте прокси Nginx

swoole также упоминается на официальном сайте: swoole_http_server поддерживает протокол Http не полностью, и его рекомендуется использовать только как сервер приложений. И добавьте Nginx в качестве прокси на переднем конце.

Затем добавляем сервер, который нужно настроить в nginx.conf:

server {
    listen 80;
    server_name your.domain.com;
    root /path/to/laravel/public;
    index index.php;

    location = /index.php {
        # Ensure that there is no such file named "not_exists"
        # in your "public" directory.
        try_files /not_exists @swoole;
    }

    location / {
        try_files $uri $uri/ @swoole;
    }

    location @swoole {
        set $suffix "";

        if ($uri = /index.php) {
            set $suffix "/";
        }

        proxy_set_header Host $host;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # IF https
        # proxy_set_header HTTPS "on";

        proxy_pass http://127.0.0.1:1215$suffix;
    }
}

На этом все готово, и вы можете посещать свой веб-сайт как обычно.