Start · Sprachen · PHP · Referenz · EventHttpConnection

EventHttpConnection

Klasse

Repräsentiert eine HTTP-Verbindung im <code>libevent</code>-basierten Event-System und ermöglicht asynchrone HTTP-Kommunikation.

seit PHP 1.2.6 Kategorie: io

Signatur

class EventHttpConnection

Beschreibung

EventHttpConnection ist Teil der Event-PECL-Erweiterung und kapselt eine HTTP-Verbindung auf Basis der libevent-Bibliothek. Sie ermöglicht es, asynchrone HTTP-Anfragen an einen Server zu senden, ohne den Prozess zu blockieren – ideal für hochperformante, nicht-blockierende I/O-Anwendungen.

Ein typischer Anwendungsfall ist das Versenden von HTTP-Requests (GET, POST usw.) im Rahmen eines Event-Loops (EventBase). Die Verbindung wird mit einem optionalen DNS-Resolver und einem SSL-Kontext erstellt, was TLS/HTTPS-Verbindungen ermöglicht.

Durch die Kombination von EventHttpConnection und EventHttpRequest lassen sich vollständige HTTP-Client-Workflows abbilden: Anfrage erstellen, Callback für die Antwort registrieren und den Event-Loop starten. Dieses Modell eignet sich besonders für Event-getriebene Server-Anwendungen oder Microservices, die viele parallele HTTP-Verbindungen verwalten müssen.

Hinweis: Diese Klasse ist nicht zu verwechseln mit serverseitigem HTTP-Handling via EventHttp. EventHttpConnection agiert als Client-seitige Verbindung.

Parameter

Name Typ Default Beschreibung
$base Pflicht EventBase Die EventBase-Instanz, mit der diese Verbindung verknüpft wird.
$dns_base Pflicht EventDnsBase|null null Optionaler asynchroner DNS-Resolver (EventDnsBase). Wird null übergeben, erfolgt die Namensauflösung synchron (blockierend).
$address Pflicht string Hostname oder IP-Adresse des Zielservers.
$port Pflicht int Port des Zielservers, z. B. 80 für HTTP oder 443 für HTTPS.
$ctx EventSslContext|null null Optionaler SSL-Kontext (EventSslContext) für verschlüsselte HTTPS-Verbindungen.

Rückgabewert

Typ

Beispiele

Einfacher asynchroner HTTP-GET-Request

<?php
$base = new EventBase();
$dnsBase = new EventDnsBase($base, true);

$conn = new EventHttpConnection($base, $dnsBase, 'example.com', 80);
$conn->setTimeout(5);

$req = new EventHttpRequest(function (EventHttpRequest $req) use ($base) {
    $buf = $req->getInputBuffer();
    echo 'Statuscode: ' . $req->getResponseCode() . PHP_EOL;
    echo 'Body: ' . $buf->read($buf->length) . PHP_EOL;
    $base->exit();
}, $base);

$conn->makeRequest($req, EventHttpRequest::CMD_GET, '/index.html');
$base->dispatch();
?>
Statuscode: 200 Body: <!doctype html>...

Maximale Anzahl an Keepalive-Requests und Retry setzen

<?php
$base = new EventBase();

$conn = new EventHttpConnection($base, null, '127.0.0.1', 8080);
$conn->setMaxBodySize(1024 * 1024); // 1 MB
$conn->setMaxHeadersSize(8192);     // 8 KB
$conn->setRetries(3);               // bis zu 3 Wiederholungsversuche
$conn->setTimeout(10);              // 10 Sekunden Timeout

$req = new EventHttpRequest(function (EventHttpRequest $req) use ($base) {
    echo 'Antwort erhalten, Code: ' . $req->getResponseCode() . PHP_EOL;
    $base->exit();
}, $base);

$conn->makeRequest($req, EventHttpRequest::CMD_GET, '/api/status');
$base->dispatch();
?>
Antwort erhalten, Code: 200

// Wichtig · Fallstricke

Blockierende DNS-Auflösung: Wenn für dns_base null übergeben wird, blockiert die DNS-Auflösung den gesamten Event-Loop. Für produktive, hochperformante Anwendungen sollte stets ein EventDnsBase-Objekt genutzt werden.

SSL/TLS: Für HTTPS-Verbindungen muss die Event-Erweiterung mit OpenSSL-Unterstützung kompiliert worden sein. Der EventSslContext muss korrekt konfiguriert sein, inklusive Zertifikatsprüfung – andernfalls bestehen Sicherheitslücken (Man-in-the-Middle-Angriffe).

Ressourcenverwaltung: EventHttpConnection-Objekte sollten nicht länger als nötig gehalten werden. Bei vielen parallelen Verbindungen empfiehlt sich ein Connection-Pool-Muster.