API Polling Adalah Kemas Kini PHP yang Paling Kurang Dihargai
PHP 8.6 mengandungi kemas kini senyap yang mengubah segala-galanya untuk rangkaian berkonkurensi tinggi.
Walaupun ramai pembangun membahaskan tentang generics, API Polling telah melepasi RFC dengan sangat sedikit gangguan. Ia menerima sokongan daripada tokoh-tokoh utama seperti pencipta FrankenPHP dan penulis Composer.
Selama bertahun-tahun, PHP bergantung pada stream_select(). Alat ini menggunakan panggilan sistem dari tahun 1983. Ia mempunyai tiga kelemahan utama:
- Ia mencapai had 1024 deskriptor fail pada kebanyakan sistem.
- Ia menggunakan kompleksiti O(n), bermakna prestasi merosot apabila anda menambah sambungan.
- Ia kekurangan akses kepada alatan moden seperti
epollpada Linux ataukqueuepada macOS.
Inilah sebabnya mengapa perpustakaan async seperti AMPHP atau ReactPHP memerlukan sambungan tambahan seperti ext-uv untuk berfungsi dengan baik. PHP kekurangan asas asli untuk rangkaian berskala tinggi.
API Polling membaiki lompang ini.
Ia memperkenalkan ruang nama Io\Poll. API ini secara automatik memilih backend terbaik untuk sistem anda. Ia menggunakan epoll pada Linux, kqueue pada macOS, dan event ports pada Solaris. Anda tidak perlu menguruskan butiran ini.
Berikut adalah cara ia berfungsi dalam praktis:
Anda mencipta satu Context.
Anda membungkus satu stream dalam StreamPollHandle.
Anda menambahnya ke dalam konteks dengan acara (events) yang ingin anda pantau.
Anda memanggil wait() untuk menerima hanya pencetus (triggers) yang benar-benar berlaku.
Ini bukanlah satu gelung acara (event loop) yang lengkap. Ia adalah primitif tahap rendah. Ia menyediakan infrastruktur asas yang membolehkan gelung acara berjalan dengan lebih pantas dan lebih dipercayai.
Keajaiban sebenar berlaku secara dalaman. API ini membolehkan teras PHP dan sambungan berkongsi antara muka yang seragam. Ia membolehkan:
- Pengendalian isyarat yang cekap untuk FrankenPHP.
- Pengendalian acara yang lebih baik dalam pekerja PHP-FPM.
- Antara muka yang diseragamkan untuk socket dan curl.
- Mod pencetus-tepi (edge-triggered) berprestasi tinggi.
Orang sering mengatakan PHP tidak boleh diskalakan. Untuk masa yang lama, terdapat alasan teknikal bagi dakwaan tersebut. PHP tidak mempunyai akses asli kepada primitif polling yang digunakan oleh Nginx atau Go.
Dengan PHP 8.6, alasan itu sudah tiada.
Perubahan infrastruktur yang terbaik selalunya tidak kelihatan. Anda tidak menyedari kewujudan epoll. Anda hanya menyedari bahawa pelayan mengendalikan sepuluh ribu sambungan tanpa sebarang masalah.
API Polling adalah kerja yang tidak gah yang menaikkan had keupayaan bagi seluruh ekosistem.
Sumber: https://dev.to/juststevemcd/the-polling-api-is-the-most-underrated-rfc-php-has-shipped-in-years-2d32
