Skip to content

Сервер приложений для PHP, написанный на Rust.

Rapira проектируют и разрабатывают мейнтейнеры RoadRunner.

Встроенный HTTP-сервер на основе hyper

В PHP нет HTTP-сервера для production. Встроенный сервер PHP - это инструмент для разработки. php-fpm требует отдельный веб-сервер, например nginx.

Rapira содержит HTTP-сервер на основе библиотеки Rust hyper. Hyper читает каждый запрос и записывает ответ от Rapira.

HTTP-запросы и ответы

Rust вызывает PHP напрямую

Rapira использует Rust, а PHP использует C. Rust вызывает функции C напрямую. Поэтому Rust может вызвать функцию PHP напрямую. Rapira встраивает интерпретатор в процесс сервера. Прямые биндинги управляют инициализацией интерпретатора и обработкой запроса.

Rapira не использует FastCGI, Goridge или CGO. Она не сериализует запросы и не отправляет их в другой процесс. В режимах Classic и Worker Rapira заполняет суперглобальные переменные напрямую.

Модель процессов

PHP работает в отдельных процессах. Веб-сервер отправляет записи FastCGI через сокет. Процесс PHP разбирает каждый запрос и возвращает сериализованный ответ.

  • php-fpm
  • nginx
  • Angie

Воркеры PHP - это отдельные процессы. Они получают сериализованные запросы от сервера через пайпы или сокеты. Goridge определяет формат этих данных.

  • RoadRunner

Процесс сервера содержит интерпретатор PHP. Но хост на Go не может вызывать код C напрямую. CGO обрабатывает каждый вызов между двумя языками.

  • FrankenPHP

ABI определяет, как компилируемые языки вызывают друг друга. Rust поддерживает C ABI напрямую. Rust и C используют одинаковые машинные инструкции для этих вызовов.

  • Rapira