Laravel 에서 nginx 대신 swoole 을 http 서버 로 사용 합 니 다.

4663 단어
1. Laravel 프레임 의 속 도 를 제한 하 는 것 은 무엇 입 니까?
Laravel 프레임 워 크 가 시 작 될 때 많은 파일 을 불 러 와 야 합 니 다. 게다가 생태 환경 이 좋 기로 유명 하기 때문에 개발 과정 에서 우 리 는 이미 만들어 진 바퀴 가 매우 많다 는 것 을 알 게 될 것 입 니 다. 그래서 Laravel 이 한 번 에 시작 하 는 디스크 IO 가 매우 높 습 니 다.블 로 거들 의 이전 블 로그 인 Laravel 5 프레임 워 크 성능 최적화 기법 에서 도 최적화 에 대해 언급 한 적 이 있 지만 디스크 IO 가 높 은 문 제 를 실질 적 으로 해결 하지 못 했다.
문제 의 소 재 를 알 았 으 니 쉽게 해결 할 수 있 습 니 다. Laravel 을 시작 할 때마다 이 파일 들 을 다시 불 러 오지 않 았 으 면 좋 겠 습 니 다. 이때 유명한 swoole 이 등장 합 니 다.
2.Swoole
Swoole 은 PHP 를 새롭게 정의 했다 고 합 니 다. PHP 확장 으로 PHP 가 비동기 방식 으로 실 행 될 수 있 습 니 다. node 처럼 socket 을 사용 할 수 있 고 PHP 에 일련의 비동기 IO, 이벤트 구동, 병렬 데이터 구조 기능 을 제공 합 니 다.스 울 은 인터넷, 이동 통신, 기업 소프트웨어, 클 라 우 드 컴 퓨 팅, 온라인 게임, 사물 인터넷 (IOT), 차량 인터넷, 스마트 홈 등에 광범 위 하 게 활용 할 수 있다.그것 은 프로젝트 의 성능 을 크게 향상 시 킬 수 있다.
3. Swoole 을 사용 하여 Laravel 의 성능 향상
기 존의 바퀴 중에서 아래 두 개 는 그래도 매우 괜 찮 은 것 같 아서 스스로 선택 할 수 있다.
  • swooletw/laravel-swoole
  • garveen/laravoole

  • 블 로 거들 이 첫 번 째 를 선 택 했 습 니 다. 왜 냐 고 묻 지 마 세 요. 제멋대로!그리고 시작 합 시다!
    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

    좋은 웹페이지 즐겨찾기