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

—

от автора

Два года я писал микросервисы на 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 в реальных проектах 🙂

ссылка на оригинал статьи https://habr.com/ru/post/501722/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *