Laravel 에서 nginx 대신 swoole 을 http 서버 로 사용 합 니 다.
Laravel 프레임 워 크 가 시 작 될 때 많은 파일 을 불 러 와 야 합 니 다. 게다가 생태 환경 이 좋 기로 유명 하기 때문에 개발 과정 에서 우 리 는 이미 만들어 진 바퀴 가 매우 많다 는 것 을 알 게 될 것 입 니 다. 그래서 Laravel 이 한 번 에 시작 하 는 디스크 IO 가 매우 높 습 니 다.블 로 거들 의 이전 블 로그 인 Laravel 5 프레임 워 크 성능 최적화 기법 에서 도 최적화 에 대해 언급 한 적 이 있 지만 디스크 IO 가 높 은 문 제 를 실질 적 으로 해결 하지 못 했다.
문제 의 소 재 를 알 았 으 니 쉽게 해결 할 수 있 습 니 다. Laravel 을 시작 할 때마다 이 파일 들 을 다시 불 러 오지 않 았 으 면 좋 겠 습 니 다. 이때 유명한 swoole 이 등장 합 니 다.
2.Swoole
Swoole 은 PHP 를 새롭게 정의 했다 고 합 니 다. PHP 확장 으로 PHP 가 비동기 방식 으로 실 행 될 수 있 습 니 다. node 처럼 socket 을 사용 할 수 있 고 PHP 에 일련의 비동기 IO, 이벤트 구동, 병렬 데이터 구조 기능 을 제공 합 니 다.스 울 은 인터넷, 이동 통신, 기업 소프트웨어, 클 라 우 드 컴 퓨 팅, 온라인 게임, 사물 인터넷 (IOT), 차량 인터넷, 스마트 홈 등에 광범 위 하 게 활용 할 수 있다.그것 은 프로젝트 의 성능 을 크게 향상 시 킬 수 있다.
3. Swoole 을 사용 하여 Laravel 의 성능 향상
기 존의 바퀴 중에서 아래 두 개 는 그래도 매우 괜 찮 은 것 같 아서 스스로 선택 할 수 있다.
블 로 거들 이 첫 번 째 를 선 택 했 습 니 다. 왜 냐 고 묻 지 마 세 요. 제멋대로!그리고 시작 합 시다!
composer 설치 사용:
composer require swooletw/laravel-swoole
만약 당신 이 laravel 을 사용한다 면, config / app. php 의 providers 그룹 에
SwooleTW\Http\LaravelServiceProvider::class,
lumen 을 사용한다 면 boottstrap / app. php 에 다음 코드 를 추가 하 십시오. $app->register(SwooleTW\Http\LumenServiceProvider::class);
설정 파일 을 config 디 렉 터 리 로 내 보 냅 니 다.
php artisan vendor:publish --provider="SwooleTW\Http\HttpServiceProvider"
그리고 config / swoolehttp. 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),
],
],
host 와 post 는 더 이상 말 할 필요 가 없습니다. options 의 구체 적 인 설정 은 swoole 홈 페이지 에서 상세 한 매개 변수 정 보 를 볼 수 있 습 니 다.
swoole_http. php 에 서 는 providers 배열 도 제공 합 니 다.
'providers' => [
// App\Providers\AuthServiceProvider::class,
]
swoole 를 http 로 사용 하면 이 providers 들 은 메모리 에 저장 되 기 때문에 요청 할 때마다 다시 등록 하고 다시 시작 하려 는 providers 를 설정 합 니 다.
Artisan Commands
이 바퀴 는 완전히 artisan 명령 으로 작 동 합 니 다.
php artisan swoole:http start|stop|restart|reload
순서대로 시작 / 정지 / 재 부팅 / 재 부팅.
그래서 우 리 는 아래 명령 을 통 해 swoole 를 시작 할 수 있 습 니 다.http_server
php artisan swoole:http start
이 제 는 프로필 에 있 는 host 와 port 를 통 해 Laravel 에 접근 할 수 있 습 니 다. 예 를 들 어 제 설정 은 127.0.0.1: 1215 입 니 다.메모: 이 확장 은 열 시작 을 지원 하지 않 기 때문에 코드 업데이트 가 있 을 때마다 서비스 php artisan swoole: http restart 를 다시 시작 합 니 다.물론 Liux 에 스 크 립 트 를 써 서 git pull 코드 를 자동 으로 다시 시작 할 수 있 습 니 다.
4. 성능 테스트
다음은 두 장의 그림 을 보 겠 습 니 다.
swoole 사용 전:
[사진 업로드 실패... (image - A03e 45 - 1154339910261)]
swoole 사용 후:
[사진 업로드 실패... (image - 5cca 42 - 1544339910261)]
Apache 를 사용 하 는 ab 테스트 도구 입 니 다.
ab -n1000 -c10 http://127.0.0.1:1215
우 리 는 Request per second 가 원래 의 20 여 에서 600 여 로 올 라 간 것 을 놀 라 게 발견 할 수 있다.30 배 가까이 올 랐 다.아, 얼마나 아 픈 깨 달 음 인가!!
5. Nginx 에이전트 사용
swoole 홈 페이지 에서 도 언급 했 습 니 다: swoolehttp_서버 가 Http 프로 토 콜 에 대한 지원 이 완전 하지 않 습 니 다. 응용 서버 로 만 사용 하 는 것 을 권장 합 니 다.또한 전단 에 Nginx 를 대리 로 추가 합 니 다.
그러면 nginx. conf 의 server 를 설정 해 야 합 니 다:
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;
}
}
이로써 큰 성 과 를 거 두 었 으 니, 너 는 평소 처럼 너의 사 이 트 를 방문 할 수 있다.
원문:http://www.cnblogs.com/johnson108178/p/8109596.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.