Rumah  >  Artikel  >  rangka kerja php  >  Amalan pembangunan swoole: Cara mengoptimumkan penggunaan sumber permintaan serentak

Amalan pembangunan swoole: Cara mengoptimumkan penggunaan sumber permintaan serentak

WBOY
WBOYasal
2023-11-08 18:24:191268semak imbas

Amalan pembangunan swoole: Cara mengoptimumkan penggunaan sumber permintaan serentak

Swoole ialah perpustakaan komunikasi rangkaian berprestasi tinggi berdasarkan PHP untuk membangunkan aplikasi rangkaian tak segerak dan serentak. Kerana ciri berprestasi tingginya, Swoole telah menjadi salah satu teknologi pilihan bagi banyak syarikat Internet. Dalam pembangunan sebenar, cara mengoptimumkan penggunaan sumber permintaan serentak telah menjadi cabaran yang mesti dihadapi oleh ramai jurutera. Perkara berikut akan digabungkan dengan contoh kod untuk memperkenalkan cara menggunakan Swoole untuk mengoptimumkan penggunaan sumber permintaan serentak.

1. Gunakan coroutine untuk meningkatkan concurrency

Swoole menyediakan fungsi coroutine yang berkuasa yang boleh melaksanakan pengaturcaraan tak segerak dengan mudah. Coroutine yang dipanggil merujuk kepada kaedah pengaturcaraan berbilang tugas yang menyimpan keadaan semasa tugas dalam program apabila ia dilaksanakan ke nod perantaraan, beralih kepada tugas lain untuk pelaksanaan, dan kemudian kembali ke tugas asal untuk meneruskan pelaksanaan selepas tugasan yang lain selesai. Berbanding dengan kumpulan benang, coroutine boleh mengelakkan sejumlah besar suis konteks dan meningkatkan kecekapan pemprosesan serentak.

Berikut ialah contoh mudah untuk mensimulasikan permintaan serentak kepada 10 antara muka API dan menyimpan hasilnya dalam tatasusunan:

<?php
$client = new SwooleCoroutineClient(SWOOLE_TCP);
$client->connect('127.0.0.1', 9501);

$tasks = [];
for ($i = 0; $i < 10; $i++) {
    $data = [
        'id' => $i + 1,
        'name' => 'Task ' . ($i + 1),
        'uri' => '/api/test',
    ];
    $tasks[] = json_encode($data);
}

foreach ($tasks as $data) {
    $client->send($data);
    $response = $client->recv();
    var_dump(json_decode($response, true));
}

$client->close();

Dalam kod di atas, kami menggunakan kelas SwooleCoroutineClient yang disediakan oleh Swoole untuk mensimulasikan permintaan serentak. Mula-mula kita buat array $tasks untuk menyimpan maklumat antara muka yang akan diminta. Kemudian untuk setiap tugasan kami menggunakan $client untuk menghantar permintaan dan menunggu pelayan membalas. Apabila semua permintaan selesai, pelanggan menutup sambungan.

2. Gunakan klien MySQL tak segerak untuk meningkatkan prestasi operasi pangkalan data

Swoole juga menyediakan klien MySQL tak segerak, yang boleh melaksanakan operasi pangkalan data tak segerak dengan mudah. Berbanding dengan operasi pangkalan data segerak tradisional, operasi pangkalan data tak segerak boleh meningkatkan prestasi operasi pangkalan data.

Berikut ialah contoh mudah untuk menunjukkan cara membuat pertanyaan pangkalan data secara tak segerak apabila menggunakan klien MySQL tak segerak Swoole:

<?php
$client = new SwooleMySQL;

$client->connect([
    'host' => '127.0.0.1',
    'port' => 3306,
    'user' => 'root',
    'password' => '',
    'database' => 'test',
], function($client) {
    $client->query('SELECT * FROM `user` WHERE `id` > 1', function($client, $result) {
        var_dump($result);
        $client->close();
    });
});

Dalam kod di atas, kami menggunakan kelas SwooleMySQL yang disediakan oleh Swoole untuk menanya pangkalan data secara tak segerak. Mula-mula kita menggunakan kaedah connect() untuk menyambung ke pangkalan data, dan kemudian menggunakan kaedah query() untuk menanya pangkalan data secara tak segerak. Apabila pertanyaan selesai, kami menggunakan var_dump() untuk mencetak hasil pertanyaan dan menutup sambungan pangkalan data.

3. Gunakan mekanisme Task Worker yang disediakan oleh Swoole untuk pemprosesan tugas tak segerak

Swoole juga menyediakan mekanisme Task Worker untuk melaksanakan tugas tak segerak. Mekanisme Task Worker boleh merealisasikan pengagihan dan pelaksanaan tugas dengan mudah Terutama dalam senario yang memerlukan jumlah pengkomputeran atau operasi IO yang banyak, mekanisme Task Worker boleh meningkatkan prestasi aplikasi dengan banyak.

Berikut ialah contoh mudah untuk menunjukkan cara melaksanakan tugas secara tidak segerak apabila menggunakan mekanisme Task Worker Swoole:

<?php
$server = new SwooleServer('127.0.0.1', 9501);
$server->set([
    'worker_num' => 2,
    'task_worker_num' => 2,
]);

$server->on('start', function($server) {
    echo "Swoole server is started at http://127.0.0.1:9501
";
});

$server->on('receive', function($server, $fd, $from_id, $data) {
    $task_id = $server->task($data);
    echo "New task #{$task_id} is dispatched
";
});

$server->on('task', function($server, $task_id, $from_id, $data) {
    echo "Task #{$task_id} is started
";
    sleep(1);
    echo "Task #{$task_id} is finished
";
    $server->finish("Task #{$task_id} is done");
});

$server->on('finish', function($server, $task_id, $data) {
    echo "Task #{$task_id} is done: {$data}
";
});

$server->start();

Dalam kod di atas, kami mula-mula mencipta pelayan Swoole dan menetapkan pekerja menggunakan kaedah set() dan bilangan tugasan pekerja. Kemudian kami mentakrifkan fungsi panggil balik untuk memproses permintaan Apabila menerima permintaan klien, kami menggunakan kaedah tugas() untuk membiarkan Swooole menyerahkan permintaan itu kepada pekerja tugas untuk diproses. Pekerja tugas akan melaksanakan tugas secara tidak segerak dan memanggil fungsi panggil balik finish() apabila selesai. Dalam fungsi panggil balik yang melaksanakan tugas, kami menggunakan gema untuk mencetak status tugas dan sleep() untuk mensimulasikan masa yang diperlukan untuk melaksanakan tugas.

Kesimpulan:

Swoole ialah set alat yang sangat berkuasa yang boleh mengoptimumkan prestasi dan kesesuaian aplikasi PHP dengan sangat baik. Dengan menggunakan ciri yang disediakan oleh Swoole seperti coroutine, pelanggan MySQL tak segerak dan mekanisme Task Worker, kami boleh mengoptimumkan penggunaan sumber dengan mudah untuk permintaan serentak dan meningkatkan prestasi dan kebolehpercayaan aplikasi.

Atas ialah kandungan terperinci Amalan pembangunan swoole: Cara mengoptimumkan penggunaan sumber permintaan serentak. 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