"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 고드름으로 몇 분 안에 초고속 PHP 서버를 구축하십시오

고드름으로 몇 분 안에 초고속 PHP 서버를 구축하십시오

2025-03-24에 게시되었습니다
검색:259

이벤트 중심 프로그래밍은 절차 코딩에 익숙한 PHP 개발자에게 고유 한 과제를 제시합니다. PHP의 절차 적 특성에서, 사건은 종종 고유 한 비동기 동작없이 간단한 기능 호출로 요약됩니다. 모든 코드 실행은 여전히 ​​차단됩니다.

그러나 JavaScript와 같은 언어는 중앙 구성 요소로서 이벤트 루프의 잠재력을 보여줍니다. 이 통찰력으로 인해 개발자들은 이벤트 루프 및 비동기 기능을 PHP HTTP 서버에 통합하게되었습니다. 이 기사에서는 고성능 PHP HTTP 서버가 고드름 라이브러리를 활용하고 최적화 된 정적 파일 서빙을 위해 Apache와 통합하는 것을 보여줍니다. 예제 코드는 https://github.com/sitepoint-editors/icicle-http-server .

에서 사용할 수 있습니다.

Build a Superfast PHP Server in Minutes with Icicle

주요 장점

  • 고등학교의 비동기 전력 : 고등학교의 비동기 프로그래밍 기능은 놀랍도록 빠른 PHP 서버를 생성 할 수 있습니다. 동시 요청 처리는 성능을 크게 향상시킵니다.
  • 정적 파일에 대한 Apache 통합 : 정적 파일을 Apache에 효율적으로 오프로드하여 PHP 아이 시클 서버가 동적 요청을 처리합니다.
  • 라우팅 및 템플릿 향상 : 라우터 (리그 \ route)로 기본 서버를 확장하면 정교한 요청 처리 및 라우팅이 가능합니다. 템플릿 엔진 (예 : 리그 \ 플레이트)은 복잡한 응용 프로그램을위한 레이아웃 및 템플릿 상속과 같은 기능을 추가합니다.

최적화 된 정적 파일 서빙에 대한 Apache 구성

정적 파일에 대한 불필요한 PHP 처리를 피하려면 Apache를 직접 제공하도록 구성하십시오.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]

mod_rewrite 구성은 Apache가 존재하지 않는 파일에 대한 요청을 다른 포트 (예 : 9001)로 전달하도록 지시합니다. 여기서 PHP 아이 시클 서버가 처리 할 수 ​​있습니다.

기본 고드름 http 서버

고드름을 설치하여 시작하십시오 :

composer require icicleio/http

간단한 고드름 http 서버 예 :

// server.php
require __DIR__ . "/vendor/autoload.php";

use Icicle\Http\Message\RequestInterface;
use Icicle\Http\Message\Response;
use Icicle\Http\Server\Server;
use Icicle\Loop;
use Icicle\Socket\Client\ClientInterface;

$server = new Server(function (RequestInterface $request, ClientInterface $client) {
    $response = (new Response(200))->withHeader("Content-Type", "text/plain");
    yield $response->getBody()->end("hello world");
    yield $response;
});

$server->listen(9001);
Loop\run();

League \ Route를 사용한 고급 라우팅

보다 강력한 라우팅을 위해 리그 \ 루트를 통합하십시오 :

composer require league/route

향상된 server.php 라우팅 :

// server.php
// ... (previous imports) ...
use League\Route\Http\Exception\MethodNotAllowedException;
use League\Route\Http\Exception\NotFoundException;
use League\Route\RouteCollection;
use League\Route\Strategy\UriStrategy;

// ... (Server creation) ...

    $router = new RouteCollection();
    $router->setStrategy(new UriStrategy());
    require __DIR__ . "/routes.php";
    $dispatcher = $router->getDispatcher();

    try {
        $result = $dispatcher->dispatch($request->getMethod(), $request->getRequestTarget());
        $status = 200;
        $content = $result->getContent();
    } catch (NotFoundException $e) {
        $status = 404;
        $content = "not found";
    } catch (MethodNotAllowedException $e) {
        $status = 405;
        $content = "method not allowed";
    }

    // ... (Response creation and sending) ...

샘플 loures.php :

$router->addRoute("GET", "/home", function () {
    return "hello world";
});

리그 \ 플레이트로 복잡한 조회수를 렌더링하는

복잡한 전망의 경우 리그 \ 플레이트를 사용하십시오 :

composer require league/plates

템플릿 구현 ( templates/layout.php 템플릿/home.php 의 예제 스 니펫 및 업데이트 된 lour.php 는 간단하지만 원래 예제의 구조를 따르십시오).

성능 벤치 마크 및 결론

원래 기사에는 상당수의 동시 요청을 처리 할 수있는 서버의 기능을 보여주는 성능 벤치 마크가 포함되어 있습니다. 이러한 벤치 마크는 특정 하드웨어 및 실행 된 조건의 맥락에서 고려해야합니다. 핵심 테이크 아웃은 고드름의 비동기 모델로 고성능의 잠재력입니다. 이 기사는 실험과 지역 사회 토론을 장려함으로써 끝납니다. 고드름 저자가 제공하는 업데이트 된 벤치 마크도 포함되어 있습니다. FAQ 섹션은 서버 개발에 고드름을 사용하는 다양한 측면을 더 명확하게 설명합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3