Rumah > rangka kerja php > Swoole > teks badan

Amalan pengaturcaraan tak segerak swoole: tingkatkan prestasi perkhidmatan web sepuluh kali ganda

WBOY
Lepaskan: 2023-06-13 21:41:31
asal
1437 orang telah melayarinya

Dengan perkembangan pesat Internet, semakin banyak syarikat terlibat dalam pembangunan web, dan cara meningkatkan prestasi perkhidmatan web telah menjadi isu utama. Dalam beberapa tahun kebelakangan ini, pengaturcaraan tak segerak secara beransur-ansur menjadi popular sebagai teknologi untuk meningkatkan kecekapan rangkaian IO, dan rangka kerja Swoole adalah salah satu wakil pengaturcaraan tak segerak. Dalam artikel ini, kami akan memperkenalkan cara melaksanakan pengaturcaraan tak segerak melalui rangka kerja Swoole dan menunjukkan kesan ketaranya dalam meningkatkan prestasi perkhidmatan web.

1. Apakah itu Swoole

Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi, tak segerak dan serentak. Ia memudahkan pembangun PHP untuk menulis kod tak segerak dan meningkatkan kecekapan dan prestasi kod. Swoole menyediakan Soket domain TCP/UDP/Unix, pelayan HTTP, pelayan WebSocket, serta teks tak segerak, fungsi bersiri JSON dan penyahsirilan. Pada masa ini, Swooole digemari oleh semakin ramai pembangun PHP.

2. Beberapa perkara yang perlu diberi perhatian apabila menggunakan Swoole

1 Dayakan coroutine:

Dalam Swoole, untuk menyokong pengaturcaraan tak segerak, kami perlu mendayakan coroutine. Coroutine ialah kaedah penjadualan yang lebih ringan daripada utas kerana tiada overhed tambahan bagi penukaran konteks dan sumber mod kernel.

Menggunakan Swoole untuk menggunakan coroutine adalah sangat mudah Anda hanya perlu menambah kod berikut pada fail entri atau objek pelayan Swoole:

SwooleRuntime::enableCoroutine();
Salin selepas log masuk

Dengan cara ini, anda boleh menggunakan fungsi coroutine yang disediakan. oleh Swoole.

2. Beri perhatian kepada kebocoran memori:

Apabila menggunakan Swoole untuk pengaturcaraan tak segerak, anda perlu memberi perhatian kepada kebocoran memori. Kerana coroutine dalam pengaturcaraan tak segerak akan menunggu I/O untuk masa yang lama, jika ingatan tidak dikeluarkan dalam masa, ia akan menyebabkan pembaziran ingatan.

Swoole menyediakan kaedah untuk membersihkan konteks coroutine: Coroutine::defer(). Gunakannya untuk membersihkan konteks di penghujung coroutine, contohnya:

SwooleCoroutineun(function () {
    echo "Coroutine Start
";
    Coroutine::defer(function () {
        echo "Coroutine End
";
    });
});
Salin selepas log masuk

3. Perhatikan versi Swoole:

Versi baharu Swoole akan terus dioptimumkan dan dipertingkatkan, jadi kami perlu menggunakan versi terkini. Pada masa yang sama, anda perlu memberi perhatian kepada perubahan dalam setiap versi untuk memastikan keserasian dan kestabilan kod.

3. Amalan Swoole: Meningkatkan Prestasi Perkhidmatan Web

Di bawah kami menggunakan contoh mudah untuk menunjukkan cara menggunakan rangka kerja Swoole untuk meningkatkan prestasi perkhidmatan Web.

Kami mula-mula mencipta pelayan fail PHP mudah.php Fail ini akan mendengar port tempatan 9501 dan mengembalikan rentetan Hello World:

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();
Salin selepas log masuk

Jalankan fail ini menggunakan baris arahan dan akses http. ://127.0.0.1:9501/, anda boleh melihat bahawa Hello World adalah output.

Kini kami menukar kod pelayan ini kepada mod tak segerak:

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_BASE);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();
Salin selepas log masuk

Dalam kod di atas, kami menambah parameter ketiga, iaitu menggunakan mod SWOOLE_BASE untuk memulakan pelayan. Dengan cara ini, kita boleh menggunakan coroutine, IO tak segerak dan fungsi mendengar acara yang disediakan oleh Swoole.

Seterusnya, kami akan menggunakan alat Apache Bench untuk menguji prestasi pelayan apabila mengendalikan sejumlah besar permintaan.

Alat Apache Bench boleh mensimulasikan permintaan HTTP sebenar Kami boleh menggunakan permintaan serentak berbilang benang yang disediakannya untuk mensimulasikan berbilang pengguna yang mengakses pelayan pada masa yang sama dan menguji prestasi pelayan di bawah beban permintaan yang berbeza.

Masukkan arahan berikut dalam terminal untuk memasang alat Apache Bench:

# ubuntu
sudo apt-get install apache2-utils

# centos
sudo yum install httpd-tools
Salin selepas log masuk

Gunakan arahan berikut untuk menguji prestasi pelayan sebentar tadi:

ab -n 1000 -c 100 http://127.0.0.1:9501
Salin selepas log masuk

Dalam arahan ini, kita menggunakan parameter -n Jumlah bilangan permintaan, -c menunjukkan bilangan permintaan serentak. Kami menetapkan jumlah permintaan kepada 1000 dan jumlah permintaan serentak kepada 100.

Selepas ujian selesai, kita dapat melihat keputusan ujian yang dicetak oleh Apache Bench:

Concurrency Level:      100
Time taken for tests:   0.041 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      110000 bytes
HTML transferred:       12000 bytes
Requests per second:    24540.63 [#/sec] (mean)
Time per request:       4.075 [ms] (mean)
Time per request:       0.041 [ms] (mean, across all concurrent requests)
Transfer rate:          2624.27 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1    4   0.5      4       6
Waiting:        0    4   0.5      4       6
Total:          1    4   0.5      4       6

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      4
  80%      4
  90%      4
  95%      5
  98%      5
  99%      5
 100%      6 (longest request)
Salin selepas log masuk

Kita dapat melihat bahawa apabila pelayan ini mengendalikan 1000 permintaan, purata masa tindak balas setiap permintaan ialah 4.075 milisaat, bilangan permintaan respons sesaat adalah lebih kurang 24540. Keputusan prestasi ini sudah sangat baik.

Seterusnya, kami meningkatkan beban pelayan untuk melihat prestasi rangka kerja Swoole dalam keadaan serentak yang tinggi. Kami menambah bilangan permintaan serentak kepada 1000, iaitu:

ab -n 10000 -c 1000 http://127.0.0.1:9501
Salin selepas log masuk

Selepas ujian selesai, kami melihat keputusan ujian dicetak oleh Apache Bench sekali lagi:

Concurrency Level:      1000
Time taken for tests:   2.437 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1100000 bytes
HTML transferred:       120000 bytes
Requests per second:    4107.95 [#/sec] (mean)
Time per request:       243.651 [ms] (mean)
Time per request:       0.244 [ms] (mean, across all concurrent requests)
Transfer rate:          441.50 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8  84.5      0     1000
Processing:     1   22  16.0     20      176
Waiting:        0   21  16.0     20      176
Total:          1   30  86.2     20     1001

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     23
  75%     25
  80%     26
  90%     30
  95%     41
  98%     52
  99%     65
 100%   1001 (longest request)
Salin selepas log masuk

Seperti yang anda lihat, apabila bilangan concurrency mencapai 1000 , masa respons pelayan ini hanya kira-kira 200ms. Berbanding dengan pelayan web segerak dengan pengaturcaraan bukan tak segerak, Swoole boleh meningkatkan konkurensi dan prestasi dengan sangat baik.

4. Ringkasan

Artikel ini memperkenalkan rangka kerja Swoole dan aplikasinya dalam meningkatkan prestasi perkhidmatan web. Kami mempelajari cara menggunakan Swoole untuk memulakan coroutine, memberi perhatian kepada kebocoran memori dan cara menguji prestasi pelayan tak segerak Swoole.

Dalam amalan, kami boleh menggunakan alatan yang cekap seperti alatan Swoole dan Apache Bench untuk meningkatkan prestasi perkhidmatan web. Dalam senario konkurensi tinggi di Internet, menggunakan Swoole untuk pengaturcaraan tak segerak boleh meningkatkan prestasi pelayan dan memenuhi keperluan perusahaan untuk perkhidmatan web berprestasi tinggi.

Atas ialah kandungan terperinci Amalan pengaturcaraan tak segerak swoole: tingkatkan prestasi perkhidmatan web sepuluh kali ganda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan