Rumah >pembangunan bahagian belakang >tutorial php >Bina pelayan php superfast dalam beberapa minit dengan icicle

Bina pelayan php superfast dalam beberapa minit dengan icicle

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-16 08:46:11635semak imbas

Pengaturcaraan yang didorong oleh acara memberikan cabaran unik bagi pemaju PHP yang biasa dengan pengekodan prosedur. Dalam sifat prosedur PHP, peristiwa sering merebak ke panggilan fungsi mudah, tanpa tingkah laku tak segerak yang wujud. Semua pelaksanaan kod tetap menyekat.

Walau bagaimanapun, bahasa seperti JavaScript menunjukkan potensi gelung peristiwa sebagai komponen pusat. Wawasan ini telah menyebabkan pemaju untuk mengintegrasikan gelung acara dan keupayaan tak segerak ke dalam pelayan HTTP PHP. Artikel ini menunjukkan membina pelayan PHP HTTP berprestasi tinggi yang memanfaatkan perpustakaan icicle, dan mengintegrasikannya dengan Apache untuk hidangan fail statik yang dioptimumkan. Kod contoh boleh didapati di https://www.php.cn/link/ac2ef27277aab81da1d8dea067dd80c1 .

Build a Superfast PHP Server in Minutes with Icicle

Kelebihan Utama

  • Kuasa Asynchronous Icicle: Keupayaan pengaturcaraan asynchronous Icicle membolehkan penciptaan pelayan PHP yang sangat cepat. Pengendalian permintaan serentak dengan ketara meningkatkan prestasi.
  • integrasi Apache untuk fail statik: secara efisien offloads fail statik yang berkhidmat ke Apache, meninggalkan pelayan php icicle untuk mengendalikan permintaan dinamik.
  • Peningkatan dan templating Templating: Memperluas pelayan asas dengan penghala (seperti Leagueroute) membolehkan pengendalian dan penghalaan permintaan yang canggih. Enjin templat (seperti liga) menambah ciri -ciri seperti susun atur dan warisan templat untuk aplikasi yang kompleks.

konfigurasi Apache untuk hidangan fail statik yang dioptimumkan

Untuk mengelakkan pemprosesan PHP yang tidak perlu untuk fail statik, konfigurasikan Apache untuk melayani mereka secara langsung:

<code class="language-apache">RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]</code>
Konfigurasi

ini mengarahkan Apache untuk memohon permintaan untuk fail yang tidak wujud ke port yang berbeza (mis., 9001), di mana pelayan php icicle akan mengendalikannya. mod_rewrite

pelayan http icicle asas

bermula dengan memasang icicle:

<code class="language-bash">composer require icicleio/http</code>
Contoh Pelayan HTTP ICICLE yang mudah:

<code class="language-php">// 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();</code>

routing lanjutan dengan leagueroute

untuk penghalaan yang lebih mantap, mengintegrasikan Leagueroute:

<code class="language-bash">composer require league/route</code>
Enhanced

dengan penghalaan: server.php

<code class="language-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) ...</code>
sampel

: routes.php

<code class="language-php">$router->addRoute("GET", "/home", function () {
    return "hello world";
});</code>

memberikan pandangan kompleks dengan ligaplates

Untuk pandangan kompleks, gunakan LeaguePlates:

<code class="language-bash">composer require league/plates</code>
Melaksanakan templating (contoh coretan dari

dan templates/layout.php, dan dikemas kini templates/home.php ditinggalkan untuk keringkasan tetapi ikuti struktur contoh asal). routes.php

penanda aras prestasi dan kesimpulan

Artikel asal termasuk penanda aras prestasi yang menunjukkan keupayaan pelayan untuk mengendalikan sejumlah besar permintaan serentak. Penanda aras ini harus dipertimbangkan dalam konteks perkakasan dan syarat -syarat tertentu di mana mereka dijalankan. Takeaway utama adalah potensi untuk prestasi tinggi dengan model asynchronous Icicle. Artikel ini disimpulkan dengan menggalakkan percubaan dan perbincangan masyarakat. Penanda aras yang dikemas kini oleh pengarang icicle juga dimasukkan. Bahagian FAQ selanjutnya menjelaskan pelbagai aspek menggunakan icicle untuk pembangunan pelayan.

Atas ialah kandungan terperinci Bina pelayan php superfast dalam beberapa minit dengan icicle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn