Rumah >rangka kerja php >Swoole >Amalan swoole: membina rangka kerja perkhidmatan mikro berprestasi tinggi

Amalan swoole: membina rangka kerja perkhidmatan mikro berprestasi tinggi

WBOY
WBOYasal
2023-06-13 09:35:071868semak imbas

Dengan perkembangan berterusan teknologi Internet, seni bina perkhidmatan mikro telah menjadi trend semasa. Microservices ialah konsep reka bentuk yang mencapai pembangunan modular dengan membahagikan satu aplikasi yang besar kepada beberapa aplikasi yang lebih kecil. Model ini membolehkan pasukan membina dan menggunakan sistem yang kompleks dengan lebih pantas, dengan kebolehskalaan dan kebolehselenggaraan yang lebih baik.

Di sini, kami akan memperkenalkan kaedah untuk menggunakan Swoole untuk melaksanakan seni bina perkhidmatan mikro berprestasi tinggi. Swoole ialah rangka kerja rangkaian berprestasi tinggi sumber terbuka yang boleh membantu kami melaksanakan fungsi seperti IO tak segerak, coroutine dan pengaturcaraan rangkaian TCP/UDP. Ia mempunyai prestasi dan kestabilan yang baik, menjadikannya pilihan ideal untuk membina seni bina perkhidmatan mikro berprestasi tinggi.

Untuk menunjukkan aplikasi Swoole dalam membina perkhidmatan mikro, kami akan mencipta aplikasi perkhidmatan mikro ringkas, termasuk get laluan API dan berbilang nod perkhidmatan. Semua nod perkhidmatan akan menggunakan Swoole untuk melaksanakan komunikasi tak segerak dan pemprosesan berprestasi tinggi.

Pertama, kita perlu mereka bentuk get laluan API untuk memajukan permintaan pelanggan ke nod perkhidmatan yang berbeza. Pelayan HTTP berasaskan Swoole menyediakan cara mudah untuk melaksanakan fungsi ini. Kami boleh menulis pelayan HTTP mudah yang mengendalikan permintaan pelanggan dan mengarahkannya ke perkhidmatan yang berbeza.

Dalam contoh ini kita akan menggunakan laluan berikut:

  • /user/:id - Dapatkan butiran pengguna tertentu
  • /product/:id - Dapatkan maklumat terperinci produk tertentu

Dalam penghalaan, :id ialah parameter yang digunakan untuk mencari pengguna atau produk tertentu. Kami akan melaksanakan API ini dalam nod perkhidmatan kami.

Seterusnya, kita perlu mencipta berbilang nod perkhidmatan yang akan mengendalikan permintaan API dan bertindak balas kepada pelanggan. Oleh kerana sokongan IO tak segerak dan coroutine Swoole, kami boleh menggunakannya untuk melaksanakan pelayan respons pantas.

Kami akan mencipta dua nod perkhidmatan: perkhidmatan pengguna dan perkhidmatan produk. Untuk memudahkan contoh ini, kami akan menggunakan SQLite sebagai pangkalan data kami.

Perkhidmatan pengguna akan menyediakan API berikut:

  • /user/:id - Dapatkan butiran pengguna tertentu
  • /user/:id/orders - Dapatkan Semua pesanan pengguna tertentu

perkhidmatan produk akan menyediakan API berikut:

  • /product/:id - Dapatkan maklumat terperinci produk tertentu

Kami akan menunjukkan cara menggunakan Swoole untuk mencipta nod perkhidmatan asas. Mula-mula, kita perlu mencipta pelayan Swoole asas dan mendengar pada port yang ditentukan.

$server = new SwooleServer('0.0.0.0', 8001, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);

$server->on('Receive', function (SwooleServer $server, $fd, $reactor_id, $data) {

});
$server->start();

Apabila permintaan tiba, kami akan mengendalikannya dalam panggilan balik on('receive'). Kami akan menghuraikan permintaan HTTP dan mengekstrak maklumat berguna seperti URL dan kaedah HTTP.

$server->on('Receive', function (SwooleServer $server, $fd, $reactor_id, $data) {
    // 解析HTTP请求
    $header_end_pos = strpos($data, "

");
    $header_data = substr($data, 0, $header_end_pos);
    $body_data = substr($data, $header_end_pos + 4);
    $http_parser = new SwooleHttpParser();
    $request = $http_parser->execute($header_data, $body_data);
    
    // 提取URL和HTTP方法
    $path_info = isset($request['server']['path_info']) ? $request['server']['path_info'] : '/';
    $http_method = isset($request['server']['request_method']) ? $request['server']['request_method'] : 'GET';
});

Seterusnya, kami akan mengendalikan permintaan ini dan membalas respons. Kita perlu menggunakan ciri coroutine Swoole untuk melaksanakan IO tak segerak dalam kitaran pemprosesan permintaan yang sama. Dalam contoh kami, kami akan menanyakan pangkalan data SQLite untuk mendapatkan maklumat pengguna dan produk. Kami boleh menggunakan sambungan klien coroutine untuk melakukan pertanyaan dan penulisan tak segerak. Akhir sekali, kami akan mengembalikan respons HTTP dengan kod status HTTP dan kandungan respons yang betul.

$server->on('Receive', function (SwooleServer $server, $fd, $reactor_id, $data) {
    // 解析HTTP请求
    ...
    
    // 处理请求
    $response = ['status' => 404, 'content' => 'Not Found'];
    if (preg_match('/^/user/(d+)/', $path_info, $matches)) {
        // 查询用户信息
        $user_id = $matches[1];
        $db = new SwooleCoroutineMySQL();
        $db->connect([
            'host' => '127.0.0.1',
            'port' => 3306,
            'user' => 'root',
            'password' => 'password',
            'database' => 'test'
        ]);
        $result = $db->query("SELECT * FROM users WHERE id = '{$user_id}'");

        // 生成响应
        if ($result) {
            $response = ['status' => 200, 'content' => json_encode($result->fetch(), JSON_UNESCAPED_UNICODE)];
        } else {
            $response = ['status' => 404, 'content' => 'Not Found'];
        }

        $db->close();
    } else if (preg_match('/^/user/(d+)/orders/', $path_info, $matches)) {
        // 查询用户订单
        ...

        // 生成响应
        ...
    } else if (preg_match('/^/product/(d+)/', $path_info, $matches)) {
        // 查询商品信息
        ...

        // 生成响应
        ...
    }

    // 发送响应
    $http_response = new SwooleHttpResponse();
    $http_response->status($response['status']);
    $http_response->header('Content-Type', 'application/json');
    $http_response->end($response['content']);
});

Ini ialah contoh mudah tentang cara menggunakan Swoole untuk membina seni bina perkhidmatan mikro berprestasi tinggi. Swoole menyediakan banyak ciri dan alatan yang boleh membantu kami mencapai respons pantas, prestasi tinggi dan aplikasi perkhidmatan mikro boleh skala.

Apabila menggunakan Swoole, kita perlu memberi perhatian kepada perkara berikut:

  • Sentiasa pastikan kod ringkas dan mudah difahami.
  • Manfaatkan sepenuhnya ciri IO tak segerak dan coroutine Swoole untuk mencapai pemprosesan dan tindak balas berprestasi tinggi.
  • Satukan berbilang nod perkhidmatan dan gunakan get laluan API untuk mengurus dan menghalakan permintaan secara seragam.

Dengan cara ini, kami boleh membina seni bina perkhidmatan mikro berprestasi tinggi dengan mudah untuk menyediakan kebolehskalaan, kebolehselenggaraan dan kebolehpercayaan yang lebih baik untuk aplikasi kami.

Atas ialah kandungan terperinci Amalan swoole: membina rangka kerja perkhidmatan mikro berprestasi tinggi. 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