5 điểm bởi xguru 2025-05-31 | 3 bình luận | Chia sẻ qua WhatsApp
  • 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)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 Php
      • new Php(config): có thể bao gồm cấu hình như docroot
      • php.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

3 bình luận

 
nemorize 2025-05-31

Đâ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.

 
letaem77a 2025-05-31

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.

 
savvykang 2025-05-31

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