Comet - PHP-Framework für schnelle REST-APIs

Zwei Jahre lang habe ich Microservices auf Go mit Swagger-basierten Codegeneratoren geschrieben. Es stellte sich als recht kompakte und sehr schnelle Lösung heraus.

Ich benutze derzeit PHP und habe mich daher entschlossen, Mittel zu finden, um die gleichen Probleme im Sprachökosystem zu lösen. Ich kenne und liebe Laravel und Symfony, aber ich wollte sie nicht in Projekte ziehen - es gibt zu viele Batterien, für die Sie eine steile Eingabekurve für das Projekt und die Leistung bezahlen müssen.
PHP-Framework zum Erstellen einer REST-API

Als Ergebnis erschien Comet - ein modernes PHP-basiertes Framework für die Entwicklung schneller APIs unter Verwendung der Erfahrung von SlimPHP- und Workerman-Teams. Zehntausende RPS auf einer normalen virtuellen Maschine und einer Latenz von weniger als einer Millisekunde!

Um nicht unbegründet zu sein, werde ich die Testergebnisse von Comet und anderen populären Frameworks geben. Für einen ehrlicheren Vergleich wurden alle schweren Module wie ORM aus der Versammlung aller Testteilnehmer entfernt.

Der erste Fall ist eine Nachahmung einer hohen Last in Form von Tausenden von gleichzeitigen Wrk-Anforderungen für eine Methode, die eine einfache Begrüßungszeile "Hallo Welt!" Zurückgibt:

Bild

Um die minimale Verzögerung zu bewerten, haben wir die Option verwendet, bei der ein einzelner Client nacheinander eine Anforderung an dieselbe gesendet hat Endpunkt:

Bild

Wie aus den Ergebnissen hervorgeht, können Sie mit den Funktionen der Comet-Architektur einen zehnmal größeren Datenstrom mit minimalen Verzögerungen als mit herkömmlichen Frameworks verarbeiten.

Werfen wir einen Blick auf den Code, um eine Vorstellung davon zu bekommen, was Sie in der realen Entwicklung auf Comet erleben werden:

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();

Alles ist ziemlich transparent: Die Verwendung eines Routers und von Closures liefert einen kompakten Code, der dem ähnelt, was NodeJS / Express-Entwickler gewohnt sind.

Ich habe den gesamten Code auf GitHub veröffentlicht und plane, die Funktionen des Frameworks zu erweitern:

https://github.com/gotzmann/comet

Ich freue mich über Kommentare, Commits und natürlich über die Verwendung von Comet in realen Projekten :)

All Articles