Rumah > Artikel > rangka kerja php > Amalan swoole: membina rangka kerja perkhidmatan mikro berprestasi tinggi
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:
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:
perkhidmatan produk akan menyediakan API berikut:
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:
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!