Polling API PHP ਦਾ ਸਭ ਤੋਂ ਘੱਟ ਅੰਕਿਆਨਕ ਅਪਡੇਟ ਹੈ
PHP 8.6 ਵਿੱਚ ਇੱਕ ਸ਼ਾਂਤ ਅਪਡੇਟ ਸ਼ਾਮਲ ਹੈ ਜੋ ਹਾਈ-ਕੰਕਰੈਂਸੀ (high-concurrency) ਨੈੱਟਵਰਕਿੰਗ ਲਈ ਸਭ ਕੁਝ ਬਦਲ ਦਿੰਦਾ ਹੈ।
ਜਦੋਂ ਬਹੁਤ ਸਾਰੇ ਡਿਵੈਲਪਰ generics 'ਤੇ ਬਹਿਸ ਕਰ ਰਹੇ ਸਨ, Polling API ਬਹੁਤ ਘੱਟ ਰੌਲੇ-ਰੱਪੇ ਦੇ ਨਾਲ ਇੱਕ RFC ਰਾਹੀਂ ਪਾਸ ਹੋ ਗਿਆ। ਇਸ ਨੂੰ FrankenPHP ਦੇ ਸਿਰਜਣਹਾਰ ਅਤੇ Composer ਦੇ ਲੇਖਕ ਵਰਗੇ ਪ੍ਰਮੁੱਖ ਵਿਅਕਤੀਆਂ ਦਾ ਸਮਰਥਨ ਮਿਲਿਆ।
ਸਾਲਾਂ ਤੋਂ, PHP stream_select() 'ਤੇ ਨਿਰਭਰ ਸੀ। ਇਹ ਟੂਲ 1983 ਦੇ ਇੱਕ ਸਿਸਟਮ ਕਾਲ (system call) ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਇਸ ਵਿੱਚ ਤਿੰਨ ਵੱਡੀਆਂ ਖਾਮੀਆਂ ਹਨ:
- ਇਹ ਜ਼ਿਆਦਾਤਰ ਸਿਸਟਮਾਂ 'ਤੇ 1024 ਫਾਈਲ ਡਿਸਕ੍ਰਿਪਟਰਾਂ (file descriptors) ਦੀ ਸੀਮਾ ਤੱਕ ਪਹੁੰਚ ਜਾਂਦਾ ਹੈ।
- ਇਹ O(n) ਕੰਪਲੈਕਸਿਟੀ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਜਿਵੇਂ-ਜਿਵੇਂ ਤੁਸੀਂ ਕਨੈਕਸ਼ਨ ਵਧਾਉਂਦੇ ਹੋ, ਪ੍ਰਦਰਸ਼ਨ (performance) ਘਟਦਾ ਜਾਂਦਾ ਹੈ।
- ਇਸ ਵਿੱਚ Linux 'ਤੇ epoll ਜਾਂ macOS 'ਤੇ kqueue ਵਰਗੇ ਆਧੁਨਿਕ ਟੂਲਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਕਮੀ ਹੈ।
ਇਹੀ ਕਾਰਨ ਹੈ ਕਿ AMPHP ਜਾਂ ReactPHP ਵਰਗੀਆਂ async ਲਾਇਬ੍ਰੇਰੀਆਂ ਨੂੰ ਵਧੀਆ ਪ੍ਰਦਰਸ਼ਨ ਕਰਨ ਲਈ ext-uv ਵਰਗੇ ਵਾਧੂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਦੀ ਲੋੜ ਸੀ। PHP ਵਿੱਚ ਹਾਈ-ਸਕੇਲ ਨੈੱਟਵਰਕਿੰਗ ਲਈ ਕੁਦਰਤੀ (native) ਬੁਨਿਆਦ ਦੀ ਕਮੀ ਸੀ।
Polling API ਇਸ ਕਮੀ ਨੂੰ ਦੂਰ ਕਰਦਾ ਹੈ।
ਇਹ Io\Poll namespace ਪੇਸ਼ ਕਰਦਾ ਹੈ। ਇਹ API ਤੁਹਾਡੇ ਸਿਸਟਮ ਲਈ ਆਪਣੇ ਆਪ ਸਭ ਤੋਂ ਵਧੀਆ ਬੈਕਐਂਡ (backend) ਚੁਣਦਾ ਹੈ। ਇਹ Linux 'ਤੇ epoll, macOS 'ਤੇ kqueue, ਅਤੇ Solaris 'ਤੇ event ports ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਤੁਹਾਨੂੰ ਇਹਨਾਂ ਵੇਰਵਿਆਂ ਨੂੰ ਪ੍ਰਬੰਧਿਤ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।
ਅਸਲ ਵਿੱਚ ਇਹ ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦਾ ਹੈ:
- ਤੁਸੀਂ ਇੱਕ Context ਬਣਾਉਂਦੇ ਹੋ।
- ਤੁਸੀਂ ਇੱਕ stream ਨੂੰ StreamPollHandle ਵਿੱਚ ਲਪੇਟਦੇ ਹੋ।
- ਤੁਸੀਂ ਇਸਨੂੰ ਉਹਨਾਂ events ਦੇ ਨਾਲ context ਵਿੱਚ ਜੋੜਦੇ ਹੋ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।
- ਤੁਸੀਂ ਸਿਰਫ਼ ਉਹਨਾਂ triggers ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ
wait()ਨੂੰ ਕਾਲ ਕਰਦੇ ਹੋ ਜੋ ਅਸਲ ਵਿੱਚ ਵਾਪਰੇ ਹਨ।
ਇਹ ਕੋਈ ਪੂਰਾ event loop ਨਹੀਂ ਹੈ। ਇਹ ਇੱਕ low-level primitive ਹੈ। ਇਹ ਉਹ plumbing ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜੋ event loops ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਅਤੇ ਵਧੇਰੇ ਭਰੋਸੇਮੰਦ ਤਰੀਕੇ ਨਾਲ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
ਅਸਲ ਜਾਦੂ ਅੰਦਰੂਨੀ ਹੈ। ਇਹ API PHP core ਅਤੇ extensions ਨੂੰ ਇੱਕ ਸਾਂਝਾ (unified) interface ਸਾਂਝਾ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। ਇਹ ਇਹਨਾਂ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ:
- FrankenPHP ਲਈ ਕੁਸ਼ਲ signal handling।
- PHP-FPM workers ਵਿੱਚ ਬਿਹਤਰ event handling।
- sockets ਅਤੇ curl ਲਈ ਮਿਆਰੀ (standardized) interfaces।
- ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਵਾਲੇ edge-triggered modes।
ਲੋਕ ਅਕਸਰ ਕਹਿੰਦੇ ਹਨ ਕਿ PHP scale ਨਹੀਂ ਕਰ ਸਕਦਾ। ਲੰਬੇ ਸਮੇਂ ਤੱਕ, ਉਸ ਦਾਅਵੇ ਲਈ ਇੱਕ ਤਕਨੀਕੀ ਕਾਰਨ ਸੀ। PHP ਕੋਲ Nginx ਜਾਂ Go ਦੁਆਰਾ ਵਰਤੇ ਜਾਣ ਵਾਲੇ polling primitives ਤੱਕ native ਪਹੁੰਚ ਨਹੀਂ ਸੀ।
PHP 8.6 ਦੇ ਨਾਲ, ਉਹ ਬਹਾਨਾ ਖਤਮ ਹੋ ਗਿਆ ਹੈ।
ਸਭ ਤੋਂ ਵਧੀਆ ਬੁਨਿਆਦੀ ਢਾਂਚੇ (infrastructure) ਦੇ ਬਦਲਾਅ ਅਕਸਰ ਅਦਿੱਖ ਹੁੰਦੇ ਹਨ। ਤੁਸੀਂ epoll ਨੂੰ ਨੋਟ ਨਹੀਂ ਕਰਦੇ। ਤੁਸੀਂ ਸਿਰਫ਼ ਇਹ ਨੋਟ ਕਰਦੇ ਹੋ ਕਿ ਇੱਕ ਸਰਵਰ ਬਿਨਾਂ ਕਿਸੇ ਮੁਸ਼ਕਲ ਦੇ ਦਸ ਹਜ਼ਾਰ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
Polling API ਉਹ ਅਣਗੌਲਿਆ ਕੰਮ ਹੈ ਜੋ ਪੂਰੇ ecosystem ਦੀ ਸੀਮਾ ਨੂੰ ਉੱਚਾ ਕਰਦਾ ਹੈ।
ਸਰੋਤ: https://dev.to/juststevemcd/the-polling-api-is-the-most-underrated-rfc-php-has-shipped-in-years-2d32
