Rumah >pembangunan bahagian belakang >tutorial php >Pustaka pelayan HTTP dalam PHP8.0: React

Pustaka pelayan HTTP dalam PHP8.0: React

WBOY
WBOYasal
2023-05-14 17:21:061445semak imbas

Dengan perkembangan Internet, kepentingan aplikasi Web telah menarik lebih banyak perhatian. Pelayan HTTP adalah salah satu asas aplikasi Web. Dalam bidang PHP, React ialah perpustakaan pelayan HTTP yang sangat baik, yang memberikan kami kaedah pembangunan yang sangat mudah. Artikel ini akan memperkenalkan konsep asas dan penggunaan React, dan menerangkan beberapa cirinya secara terperinci.

React ialah perpustakaan rangkaian berdasarkan mekanisme gelung peristiwa. Ia menyediakan sokongan untuk protokol seperti HTTP dan Websocket, dan menyokong IO tak segerak. Tidak seperti perpustakaan pelayan HTTP PHP yang lain, React menggunakan pendekatan tak segerak dan tidak menyekat, membolehkannya mengendalikan sejumlah besar permintaan serentak dengan lebih cekap.

Memasang React adalah sangat mudah, kita boleh menggunakan Composer untuk memasangnya, seperti yang ditunjukkan di bawah:

composer require react/http:^1.0

Seterusnya, kita boleh menulis pelayan HTTP mudah untuk menguji fungsi asas React. Kodnya adalah seperti berikut:

use ReactHttpResponse;
use ReactHttpServer;
use PsrHttpMessageServerRequestInterface;

require __DIR__ . '/vendor/autoload.php';

$server = new Server(function (ServerRequestInterface $request) {
    return new Response(
        200,
        array(
            'Content-Type' => 'text/plain'
        ),
        "Hello World!
"
    );
});

$socket = new ReactSocketServer('0.0.0.0:8080', $loop);
$server->listen($socket);

echo "Server running at http://127.0.0.1:8080
";

Kod ini mencipta pelayan HTTP paling mudah berdasarkan React. Ia menerima semua permintaan dan mengembalikan respons "Hello World". Seperti yang anda lihat, kod ini menggunakan dua kelas dalam ruang nama ReactHttp: Respons dan Server. Antaranya, Respons mewakili respons HTTP, dan Server mewakili pelayan HTTP.

Mari terangkan beberapa ciri React:

1 Asynchronous IO

React menggunakan IO tak segerak untuk memproses permintaan. Apabila permintaan masuk, React mengendalikan permintaan secara tidak segerak dan terus mengendalikan permintaan lain. Ini membolehkan pelayan mengendalikan berbilang permintaan secara serentak, meningkatkan prestasi.

IO tak segerak memerlukan penggunaan mekanisme gelung peristiwa. React melaksanakan gelung peristiwa melalui kelas ReactEventLoopLoop. Berikut ialah contoh mudah:

require __DIR__ . '/vendor/autoload.php';

$loop = ReactEventLoopFactory::create();

$loop->addTimer(2, function () {
    echo "This will be echoed after 2 seconds.
";
});

$loop->run();

echo "Event loop stopped.
";

Dalam kod ini, kami menggunakan ReactEventLoopFactory::create() untuk mencipta contoh gelung peristiwa. Kemudian, kami menggunakan kaedah $loop->addTimer() untuk menetapkan pemasa 2 saat. Akhir sekali, kami memulakan gelung acara menggunakan kaedah $loop->run(). Selepas menunggu selama 2 saat, gelung acara akan melaksanakan fungsi panggil balik pemasa dan mengeluarkan sekeping teks. Apabila fungsi panggil balik melengkapkan pelaksanaan, gelung acara akan berhenti.

2. Penghalaan

Apabila membuat pelayan HTTP, kami mungkin perlu menetapkan beberapa peraturan penghalaan. React menyokong menggunakan penghala FastRoute. Berikut ialah contoh:

require __DIR__ . '/vendor/autoload.php';

$loop = ReactEventLoopFactory::create();

$router = FastRoutesimpleDispatcher(function(FastRouteRouteCollector $r) {
    $r->addRoute('GET', '/', function () {
        return new ReactHttpResponse(
            200,
            array(
                'Content-Type' => 'text/plain'
            ),
            "Hello World!
"
        );
    });
    $r->addRoute('GET', '/users/{id:d+}', function ($request) {
        $id = $request->getAttribute('id');
        return new ReactHttpResponse(
            200,
            array(
                'Content-Type' => 'text/plain'
            ),
            "User $id
"
        );
    });
});

$server = new ReactHttpServer(function ($request) use ($router) {
    $routeInfo = $router->dispatch($request->getMethod(), $request->getUri()->getPath());
    switch ($routeInfo[0]) {
        case FastRouteDispatcher::NOT_FOUND:
            return new ReactHttpResponse(404, array('Content-Type' => 'text/plain'), 'Not found');
        case FastRouteDispatcher::METHOD_NOT_ALLOWED:
            $allowedMethods = $routeInfo[1];
            return new ReactHttpResponse(405, array('Content-Type' => 'text/plain'), 'Method not allowed');
        case FastRouteDispatcher::FOUND:
            $handler = $routeInfo[1];
            $vars = $routeInfo[2];
            return $handler($request, ...array_values($vars));
    }
});

$socket = new ReactSocketServer('0.0.0.0:8080', $loop);
$server->listen($socket);

echo "Server running at http://127.0.0.1:8080
";

Dalam kod ini, kami menggunakan penghala FastRoute untuk menetapkan dua peraturan penghalaan untuk pelayan HTTP. Apabila URL yang diminta ialah '/', "Hello World" dikembalikan apabila URL yang diminta ialah '/users/{id}', "User {id}" dikembalikan. Antaranya, {id:d+} bermaksud memadankan nombor. Kami menggunakan $routeInfo[0] untuk mendapatkan hasil pengedaran laluan FastRoute dan menetapkan respons mengikut hasil yang berbeza.

3. Websocket

Selain protokol HTTP, React juga menyokong pelaksanaan protokol Websocket. Berikut ialah contoh mudah:

use ReactHttpResponse;
use ReactHttpServer;
use RatchetRFC6455MessagingMessageInterface;
use RatchetWebSocketMessageComponentInterface;
use RatchetWebSocketWsServer;

require __DIR__ . '/vendor/autoload.php';

class EchoServer implements MessageComponentInterface
{
    public function onOpen(ConnectionInterface $conn) {
        echo "Connection opened ({$conn->resourceId})
";
    }

    public function onClose(ConnectionInterface $conn) {
        echo "Connection closed ({$conn->resourceId})
";
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "An error has occurred: {$e->getMessage()} ({$conn->resourceId})
";
        $conn->close();
    }

    public function onMessage(ConnectionInterface $from, MessageInterface $msg) {
        echo "Message received from ({$from->resourceId}): {$msg}
";
        $from->send($msg);
    }
}

$echo = new EchoServer();

$server = new Server(new WsServer($echo));

$socket = new ReactSocketServer('0.0.0.0:8080', $loop);
$server->listen($socket);

$loop->run();

Dalam kod ini, kami melaksanakan kelas EchoServer sebagai pelayan Websocket. Ia melaksanakan antara muka MessageComponentInterface dan mengatasi empat kaedahnya. Apabila pautan dibuka, kaedah onOpen() akan dipanggil; apabila pautan ditutup, kaedah onClose() akan dipanggil apabila ralat berlaku pada pautan, kaedah onError() akan dipanggil; diterima daripada pautan, Kaedah onMessage() akan dipanggil.

Akhir sekali, kami menghantar contoh EchoServer kepada WSServer dan mencipta pelayan HTTP untuk mendengar permintaan WebSocket. Kami menggunakan ReactSocketServer untuk mendengar pada alamat IP dan port, dan menggunakan kaedah $loop->run() untuk memulakan gelung acara.

Ringkasan

React ialah perpustakaan pelayan HTTP PHP yang sangat baik. Ia menyediakan kami kaedah pembangunan yang sangat mudah dan menyokong banyak ciri, seperti IO tak segerak, penghalaan, dll. Melalui pengenalan artikel ini, anda boleh mempunyai pemahaman yang lebih mendalam tentang ciri-ciri React dan mula menggunakan React untuk membangunkan aplikasi web anda sendiri.

Atas ialah kandungan terperinci Pustaka pelayan HTTP dalam PHP8.0: React. 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