Skip to content

Serwer aplikacji PHP napisany w Ruście.

Opiekunowie RoadRunnera projektują i rozwijają Rapirę.

Wbudowany serwer HTTP oparty na hyper

PHP nie zawiera produkcyjnego serwera HTTP. Jego wbudowany serwer to narzędzie deweloperskie. php-fpm wymaga osobnego serwera WWW, na przykład nginx.

Rapira zawiera serwer HTTP, który używa biblioteki Rusta hyper. Hyper czyta każde żądanie i zapisuje odpowiedź od Rapiry.

Żądania i odpowiedzi HTTP

Rust wywołuje PHP bezpośrednio

Rapira używa Rusta, a PHP używa C. Rust wywołuje funkcje C bezpośrednio. Dlatego Rust może bezpośrednio wywołać funkcję PHP. Rapira osadza interpreter w procesie serwera. Bezpośrednie wiązania sterują inicjalizacją interpretera i obsługą żądań.

Rapira nie używa FastCGI, Goridge ani CGO. Nie serializuje żądań i nie wysyła ich do innego procesu. W trybach Classic i Worker Rapira wypełnia zmienne superglobalne bezpośrednio.

Model procesów

PHP działa w osobnych procesach. Serwer WWW wysyła rekordy FastCGI przez gniazdo. Proces PHP parsuje każde żądanie i zwraca zserializowaną odpowiedź.

  • php-fpm
  • nginx
  • Angie

Workery PHP to osobne procesy. Odbierają zserializowane żądania od serwera przez potoki lub gniazda. Goridge definiuje format tych danych.

  • RoadRunner

Proces serwera zawiera interpreter PHP. Jednak jego host w Go nie może bezpośrednio wywoływać kodu C. CGO obsługuje każde wywołanie między tymi dwoma językami.

  • FrankenPHP

ABI określa, jak języki kompilowane wywołują się nawzajem. Rust obsługuje C ABI bezpośrednio. Rust i C używają tych samych instrukcji maszynowych dla tych wywołań.

  • Rapira