Comet: marco PHP para API REST rápidas

Durante dos años escribí microservicios en Go usando generadores de código basados ​​en Swagger. Resultó soluciones bastante compactas y muy rápidas.

Actualmente estoy usando PHP, así que decidí encontrar medios para resolver los mismos problemas en el ecosistema del lenguaje. Conozco y amo a Laravel y Symfony, pero no quería arrastrarlos a los proyectos: hay demasiadas baterías por las que tienes que pagar una curva empinada para ingresar al proyecto y al rendimiento.
Marco PHP para crear una API REST

Como resultado, apareció Comet : un marco moderno basado en PHP para desarrollar API rápidas utilizando la experiencia de los equipos SlimPHP y Workerman. ¡Decenas de miles de RPS en una máquina virtual normal y una latencia de menos de un milisegundo!

Para no ser infundado, daré los resultados de las pruebas de Comet y otros marcos populares. Para una comparación más honesta, todos los módulos pesados ​​como ORM se eliminaron del conjunto de todos los participantes de la prueba.

El primer caso es una imitación de una gran carga en forma de miles de solicitudes de competencia competitivas para un método que devuelve "¡Hola, Mundo!" Línea de bienvenida en texto sin formato:

imagen

para estimar el retraso mínimo, utilizamos la opción en la que un solo cliente envió secuencialmente una solicitud punto final:

imagen

Como se puede ver en los resultados, las características de la arquitectura Comet le permiten procesar un flujo de solicitudes diez veces mayor con demoras mínimas que los marcos tradicionales.

Echemos un vistazo al código para tener una idea de lo que encontrará en el desarrollo real en 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();

Todo es bastante transparente: el uso de un enrutador y cierres proporciona un código compacto, más similar a lo que los desarrolladores de NodeJS / Express están acostumbrados.

He publicado todo el código en GitHub y planeo expandir las capacidades del marco:

https://github.com/gotzmann/comet

Estaré encantado de comentar, comprometer y, por supuesto, el uso de Comet en proyectos reales :)

All Articles