Bezpośrednie wywołania między Rustem a PHP
Między Rustem a PHP nie ma żadnej warstwy: nie ma FastCGI, gniazd, Goridge, CGO ani żadnej serializacji.
Serwer aplikacji PHP napisany w Ruście.
Opiekunowie RoadRunnera projektują i rozwijają Rapirę.
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 HTTPRapira 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ówPHP działa w osobnych procesach. Serwer WWW wysyła rekordy FastCGI przez gniazdo. Proces PHP parsuje każde żądanie i zwraca zserializowaną odpowiedź.
Workery PHP to osobne procesy. Odbierają zserializowane żądania od serwera przez potoki lub gniazda. Goridge definiuje format tych danych.
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.
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ń.