Polling API Ndiyo Sasisho la PHP Ambalo Halijathaminiwa Zaidi
PHP 8.6 ina sasisho la kimya ambalo linabadilisha kila kitu kwa mtandao wenye mwingiliano mkubwa wa wakati mmoja (high-concurrency networking).
Wakati watengenezaji wengi walibishana kuhusu generics, Polling API ilipitishwa kupitia RFC kwa kelele kidogo sana. Ilipata uungaji mkono kutoka kwa watu muhimu kama mwanzilishi wa FrankenPHP na mwandishi wa Composer.
Kwa miaka mingi, PHP ilitegemea stream_select(). Chombo hiki kinatumia mwito wa mfumo (system call) kutoka mwaka 1983. Ina kasoro tatu kuu:
- Inafikia kikomo cha file descriptors 1024 kwenye mifumo mingi.
- Inatumia utata wa O(n), ikimaanisha utendaji unashuka unapoongeza miunganisho.
- Inakosa uwezo wa kufikia zana za kisasa kama
epollkwenye Linux aukqueuekwenye macOS.
Hii ndiyo sababu maktaba za async kama AMPHP au ReactPHP zilikuwa zinahitaji nyongeza (extensions) za ziada kama ext-uv ili kufanya vizuri. PHP ilikosa msingi wa asili kwa ajili ya mtandao wa kiwango cha juu.
Polling API inaziba pengo hili.
Inatambulisha Io\Poll namespace. API hii huchagua kiini (backend) bora kwa mfumo wako kiotomatiki. Inatumia epoll kwenye Linux, kqueue kwenye macOS, na event ports kwenye Solaris. Huhitaji kusimamia maelezo haya.
Hivi ndivyo inavyofanya kazi kwa vitendo:
Unatengeneza Context.
Unafunika stream kwenye StreamPollHandle.
Unaiongeza kwenye context pamoja na matukio (events) unayotaka kuangalia.
Unaita wait() ili kupokea vichocheo (triggers) vilivyotokea tu.
Hii siyo event loop kamili. Ni primitive ya kiwango cha chini. Inatoa miundombinu ya msingi inayoruhusu event loops kufanya kazi kwa haraka zaidi na kwa uaminifu zaidi.
Maajabu ya kweli yako ndani. API hii inaruhusu PHP core na extensions kushiriki kiolesura (interface) kimoja. Inaruhusu:
- Ushughulikiaji bora wa ishara (signal handling) kwa FrankenPHP.
- Ushughulikiaji bora wa matukio (event handling) katika PHP-FPM workers.
- Violesura vilivyosanifishwa kwa ajili ya sockets na curl.
- Hali za edge-triggered zenye utendaji wa juu.
Watu mara nyingi husema PHP haiwezi kukua (scale). Kwa muda mrefu, kulikuwa na sababu ya kiufundi ya dai hilo. PHP haikuwa na ufikiaji wa asili wa polling primitives zinazotumiwa na Nginx au Go.
Kwa PHP 8.6, udhuru huo umepotea.
Mabadiliko bora ya miundombinu mara nyingi hayatazamiki. Huuoni epoll. Unagundua tu kwamba seva inashughulikia miunganisho elfu kumi bila shida yoyote.
Polling API ni kazi isiyo na makuu inayoinua uwezo wa mfumo mzima (ecosystem).
Chanzo: https://dev.to/juststevemcd/the-polling-api-is-the-most-underrated-rfc-php-has-shipped-in-years-2d32
