Skip to content

Un servidor de aplicaciones PHP escrito en Rust.

Los mantenedores de RoadRunner diseñan e implementan Rapira.

Un servidor HTTP integrado que usa hyper

PHP no incluye un servidor HTTP para producción. Su servidor integrado es una herramienta de desarrollo. php-fpm necesita un servidor web separado, como nginx.

Rapira incluye un servidor HTTP que usa la biblioteca de Rust hyper. Hyper lee cada petición y escribe la respuesta de Rapira.

Peticiones y respuestas HTTP

Rust llama a PHP directamente

Rapira usa Rust, y PHP usa C. Rust llama a funciones de C directamente. Por tanto, Rust puede llamar a una función de PHP directamente. Rapira incrusta el intérprete en el proceso del servidor. Los bindings directos controlan la inicialización del intérprete y el procesamiento de las peticiones.

Rapira no usa FastCGI, Goridge ni CGO. No serializa las peticiones ni las envía a otro proceso. En los modos Classic y Worker, Rapira rellena las superglobales directamente.

Modelo de procesos

PHP se ejecuta en procesos separados. El servidor web envía registros FastCGI a través de un socket. El proceso PHP analiza cada petición y devuelve una respuesta serializada.

  • php-fpm
  • nginx
  • Angie

Los workers de PHP son procesos separados. Reciben del servidor peticiones serializadas a través de pipes o sockets. Goridge define el formato de estos datos.

  • RoadRunner

El proceso del servidor contiene el intérprete de PHP. Pero su host en Go no puede llamar a código C directamente. CGO procesa cada llamada entre los dos lenguajes.

  • FrankenPHP

Una ABI define cómo se llaman entre sí los lenguajes compilados. Rust admite la ABI de C directamente. Rust y C usan las mismas instrucciones de máquina para estas llamadas.

  • Rapira