Comet — PHP-фреймворк для быстрых REST API

Comet — PHP-фреймворк для быстрых REST API

https://habr.com/ru/post/501722/


Два года я писал микросервисы на Go, используя генераторы кода на базе Swagger. Получались довольно компактные и очень быстрые решения.


Сейчас использую PHP, поэтому решил найти средства для решения тех же самых задач в экосистеме языка. Знаю и люблю Laravel и Symfony, но тащить их в проекты не хотелось — слишком много батареек, за которые приходится расплачиваться крутой кривой входа в проект и производительностью.

PHP фреймворк для создания REST API



В итоге появился Comet — современный фреймворк на базе PHP для разработки быстрых API, использующий наработки команд SlimPHP и Workerman. Десятки тысяч RPS на обычной виртуальной машине и латенси менее миллисекунды!


Чтобы не быть голословным, приведу результаты тестирования Comet и других популярных фреймворков. Для более честного сравнения, все тяжелые модули вроде ORM были удалены из сборки всех участников теста.


Первый кейс — имитация highload-нагрузки в виде тысяч конкурентных запросов wrk на метод, возвращающую в виде простого текста строчку приветствия «Hello, World!»:


image



Для оценки минимальной задержки использовался вариант, в котором единственный клиент последовательно отправлял по одному запросу на тот же самый ендпойнт:


image



Как видно из результатов, особенности архитектуры Comet позволяют обрабатывать в десять раз больший поток запросов с минимальными задержками, чем традиционные фреймворки.


Давайте заглянем в код, чтобы получить представление о том, с чем придется столкнуться в реальной разработке на Comet:


use Comet\Comet;

require_once __DIR__ . '/vendor/autoload.php';

$app = new Comet();

$app->get('/hello', function ($request, $response) {
    $response
        ->getBody()
        ->write("Hello, Comet!");      
    return $response;
});

$app->run();


Все довольно прозрачно: использование роутера и замыканий обеспечивает компактный код, более похожий на то, к чему привыкли разработчики NodeJS / Express.


Я выложил на GitHub весь код и планирую расширять возможности фреймворка:


https://github.com/gotzmann/comet


Буду рад комментариям, коммитам и, конечно — использованию Comet в реальных проектах :)


Report Page