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;
}
}
На этом все готово, и вы можете посещать свой веб-сайт как обычно.