Exceptions TrueAsync Server
(PHP 8.6+, true_async_server 0.1+)
Hiérarchie
\Exception
└── TrueAsync\HttpServerException // base
├── TrueAsync\HttpServerRuntimeException // final
├── TrueAsync\HttpServerInvalidArgumentException // final
├── TrueAsync\HttpServerConnectionException // final
├── TrueAsync\HttpServerProtocolException // final
└── TrueAsync\HttpServerTimeoutException // final
\Async\AsyncCancellation
└── TrueAsync\HttpException // PAS final — héritez pour vos exceptions domainTrueAsync\HttpServerException
namespace TrueAsync;
class HttpServerException extends \Exception {}Exception de base pour toutes les erreurs serveur. Catch-all pour l'error-handling quand le domaine de l'erreur n'importe pas.
TrueAsync\HttpServerRuntimeException
final class HttpServerRuntimeException extends HttpServerException {}Erreurs runtime pendant le fonctionnement du serveur. Sources typiques :
- Tentative de modifier la config après
new HttpServer($config)($config->setXxx()après lock). - Tentative de modifier un
StaticHandleraprès attach ($static->setXxx()aprèsaddStaticHandler()). - Toute tentative de modifier
HttpResponseaprèssendFile()(réponse sealed). end()-après-end(),write()aprèssendFile()et violations de lifecycle analogues.
TrueAsync\HttpServerInvalidArgumentException
final class HttpServerInvalidArgumentException extends HttpServerException {}Argument invalide. Levée par les setters de HttpServerConfig/StaticHandler/UploadedFile quand la valeur est hors plage (par ex. setBrotliLevel(99), setMaxBodySize(0), content-coding inconnu dans enablePrecompressed()).
TrueAsync\HttpServerConnectionException
final class HttpServerConnectionException extends HttpServerException {}Erreurs niveau socket et réseau : bind failed, listener non levé, peer reset sur critical-path du protocole.
TrueAsync\HttpServerProtocolException
final class HttpServerProtocolException extends HttpServerException {}Erreurs niveau protocole : HTTP malformé, en-têtes invalides, violations de protocole non récupérables.
TrueAsync\HttpServerTimeoutException
final class HttpServerTimeoutException extends HttpServerException {}Timeouts : read, write, keep-alive, graceful shutdown.
TrueAsync\HttpException
namespace TrueAsync;
class HttpException extends \Async\AsyncCancellation {}Classe particulière : hérite non pas de HttpServerException mais de Async\AsyncCancellation. À utiliser pour envoyer une réponse HTTP spécifique depuis n'importe où dans le handler — le serveur lit :
$code: statut HTTP (doit être 4xx/5xx, sinon 500) ;$message: corps de la réponse.
Également levée en interne quand le parseur bute sur une limite après le dispatch du handler : le serveur cancel le handler avec HttpException, la cancellation passe par la chaîne Async normale, mais porte le statut HTTP exact pour le peer.
Pas final — héritez par domaine :
use TrueAsync\HttpException;
class NotFoundException extends HttpException {}
class ForbiddenException extends HttpException {}
class PayloadTooLargeException extends HttpException {}
$server->addHttpHandler(function ($req, $res) {
$user = User::find($req->getQueryParam('id'))
?? throw new NotFoundException('user not found', 404);
if (!$user->canBeViewedBy(currentUser()))
throw new ForbiddenException('access denied', 403);
$res->json($user->toArray());
});Bailout firewall
Toute autre exception du handler (E_ERROR, OOM, \Throwable non capturés) ne tue pas le serveur. Bailout firewall à la frontière du request entry-point H1/H2/H3 :
- Draine la coroutine en échec.
- Émet 500 vers le client (si les en-têtes ne sont pas encore partis).
- Rend le contrôle au listener — qui continue d'accepter.
Ce comportement est uniforme pour HTTP/1.1, streams HTTP/2 et streams HTTP/3.