- Node.js application के भीतर PHP application को उसी process में चलाने वाला मॉड्यूल, जिससे network connection के बिना Node.js और PHP के बीच communication संभव होता है
- इससे bidirectional communication, hybrid architecture, legacy PHP assets का उपयोग और migration आसान हो जाता है
- इसके जरिए WordPress को Next.js frontend के साथ integrate करने जैसे विभिन्न hybrid web app architectures लागू किए जा सकते हैं
- Asynchronous तरीका (
handleRequest) और synchronous तरीका (handleRequestSync) दोनों supported हैं (synchronous तरीका Node.js thread को block करता है)
- x64 Linux, x64/arm64 macOS environment को प्राथमिक support, और कुछ PHP-संबंधित system libraries की installation आवश्यक
- Request/Response/Headers जैसे HTTP objects को Node.js में सीधे create/manipulate करके PHP application के साथ स्वाभाविक integration संभव है
- उपयोग का तरीका
// `Php` instance बनाने के बाद `handleRequest()` से PHP request प्रोसेस करें
// `Request`, `Response` objects की मदद से HTTP request/response data को सीधे संभालें
import { Php, Request } from '@platformatic/php-node'
const php = new Php()
const request = new Request({
url: 'http://example.com/foo/bar',
headers: { 'X-Test': ['Hello, from Node.js!'] }
})
const response = await php.handleRequest(request)
console.log(response.body.toString())
- उपयोग के उदाहरण
- PHP-आधारित CMS (WordPress आदि) को Node.js (Next.js आदि) frontend के साथ integrate करना, या legacy PHP apps को धीरे-धीरे Node.js पर migrate करना
- दोनों environments के बीच network overhead के बिना in-memory communication लागू करने और API gateway, SSR, custom backend integration आदि के लिए उपयुक्त
- APIs
- Php class
new Php(config): docroot आदि settings शामिल की जा सकती हैं
php.handleRequest(request): asynchronous request processing (Promise return)
php.handleRequestSync(request): synchronous processing (thread blocking)
- Request class
- HTTP method, url, headers, body निर्दिष्ट किए जा सकते हैं
- हर property तक सीधे access संभव (उदाहरण:
request.method, request.body)
- Response class
status, headers, body, log जैसी properties होती हैं
- manually create किया जा सकता है (testing, error handling में उपयोगी)
- Headers class
set, add, get, getAll, has, delete आदि कई HTTP header management methods supported हैं
entries, keys, values, forEach जैसे iterator APIs से headers को batch में प्रोसेस किया जा सकता है
3 टिप्पणियां
यह बहुत आकर्षक विकल्प नहीं लगता...
PHP मूल रूप से काफी ज़्यादा memory खाता है, और इसकी initialization cost भी काफी महंगी होती है, इसलिए उचित management ज़रूरी है,
लेकिन node के साथ उसी process के भीतर, खासकर मौजूदा implementation की तरह native module में पूरे PHP को समेटकर रखी गई संरचना में, बोझ काफी ज़्यादा लगता है।
मैं होता तो php-fpm को अलग process में रखता,
और उसकी बजाय fastcgi client को js में लिखकर संभालता।
क्या यह लाइब्रेरी AWS Lambda के Node.js runtime के साथ अच्छी तरह compatible होगी?
अगर हाँ, तो आखिरकार PHP को AWS Lambda पर serverless तरीके से चलाना भी संभव लग रहा है।
अगर इसे Nodejs के साथ-साथ इस्तेमाल करने की कोई वजह नहीं है, तो आप Lambda पर PHP runtime भी deploy कर सकते हैं https://bref.sh