php-node - Trình xử lý HTTP cho PHP bên trong Node.js
(github.com/platformatic)- Mô-đun cho phép chạy ứng dụng PHP trong cùng một tiến trình bên trong ứng dụng Node.js, giúp giao tiếp giữa Node.js và PHP mà không cần kết nối mạng
- Dễ dàng hơn cho giao tiếp hai chiều, kiến trúc hybrid, tận dụng tài sản PHP legacy và migration
- Nhờ đó có thể triển khai nhiều kiến trúc webapp hybrid khác nhau, như tích hợp WordPress với frontend Next.js
- Hỗ trợ cả cách bất đồng bộ (
handleRequest) và cách đồng bộ (handleRequestSync) (cách đồng bộ sẽ chặn thread Node.js) - Ưu tiên hỗ trợ môi trường x64 Linux, x64/arm64 macOS, và cần cài một số thư viện hệ thống liên quan đến PHP
- Có thể tạo/thao tác trực tiếp các đối tượng HTTP như Request/Response/Headers trong Node.js để tích hợp tự nhiên với ứng dụng PHP
- Cách dùng
// Sau khi tạo instance `Php`, xử lý yêu cầu PHP bằng `handleRequest()` // Sử dụng các đối tượng `Request`, `Response` để xử lý trực tiếp dữ liệu request/response HTTP 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()) - Ví dụ sử dụng
- Tích hợp CMS viết bằng PHP (như WordPress) với frontend Node.js (như Next.js), hoặc migration dần ứng dụng PHP legacy sang Node.js
- Phù hợp để triển khai giao tiếp trong bộ nhớ giữa hai môi trường mà không có network overhead, cũng như tích hợp API gateway, SSR và backend tùy biến
- Các API
- Lớp
Phpnew Php(config): có thể bao gồm cấu hình như docrootphp.handleRequest(request): xử lý yêu cầu bất đồng bộ (trả về Promise)php.handleRequestSync(request): xử lý đồng bộ (chặn thread)
- Lớp
Request- Có thể chỉ định HTTP method, url, headers, body
- Có thể truy cập trực tiếp từng thuộc tính (ví dụ:
request.method,request.body)
- Lớp
Response- Có các thuộc tính như status, headers, body, log
- Có thể tạo thủ công (dùng cho test, xử lý lỗi)
- Lớp
Headers- Hỗ trợ nhiều phương thức quản lý HTTP header như set, add, get, getAll, has, delete
- Có thể xử lý hàng loạt header bằng iterator API như entries, keys, values, forEach
- Lớp
3 bình luận
Đây không phải là một lựa chọn quá hấp dẫn...
Bản thân PHP vốn dùng khá nhiều bộ nhớ, chi phí khởi tạo cũng khá đắt, nên nhất định cần được quản lý cho phù hợp, nhưng nếu đặt trong cùng một tiến trình với node, đặc biệt với cấu trúc nhét toàn bộ PHP vào module native như cách triển khai hiện tại, thì có vẻ gánh nặng sẽ tăng lên khá nhiều.
Nếu là tôi, tôi sẽ cứ để
php-fpmở một tiến trình riêng, rồi viết client FastCGI bằng JS để xử lý thì hơn.Thư viện này có tương thích tốt với runtime Node.js của AWS Lambda không?
Nếu tương thích, thì về lâu dài có vẻ cuối cùng cũng có thể chạy PHP theo kiểu serverless trên AWS Lambda.
Nếu không có lý do phải dùng song song với Node.js thì bạn cũng có thể triển khai PHP runtime lên Lambda https://bref.sh