Signatur
Beschreibung
EventConfig ist eine Hilfsklasse aus der PECL event-Erweiterung und dient dazu, eine EventBase-Instanz mit bestimmten Parametern zu konfigurieren, bevor diese erstellt wird. Mit ihr lässt sich unter anderem steuern, welches I/O-Multiplexing-Backend (z. B. epoll, kqueue, select) verwendet werden soll.
Typisch ist der Einsatz, wenn man explizit bestimmte Backends ausschließen möchte, Anforderungen an thread-sicheres Verhalten stellt oder das Verhalten von Signalen und Locks anpassen will. Das Konfigurations-Objekt wird an den EventBase-Konstruktor übergeben und danach nicht mehr benötigt.
Die Klasse bietet Methoden wie avoidMethod(), um unerwünschte Backends auszuschließen, requireFeatures(), um bestimmte Features zu erzwingen, sowie setFlags() für weitere Verhaltensanpassungen. Ohne ein EventConfig-Objekt wählt EventBase automatisch das beste verfügbare Backend.
Beispiele
EventBase mit benutzerdefinierter Konfiguration erstellen
<?php
// EventConfig erstellen und konfigurieren
$cfg = new EventConfig();
// Das 'select'-Backend explizit ausschließen
$cfg->avoidMethod('select');
// Nur Backends verwenden, die Edge-Triggered I/O unterstützen
$cfg->requireFeatures(EventConfig::FEATURE_ET);
// EventBase mit dieser Konfiguration erstellen
$base = new EventBase($cfg);
echo "Verwendetes Backend: " . $base->getMethod() . PHP_EOL;
$base->loop();
?>
EventConfig mit Flags für Nicht-blockierendes Verhalten
<?php
$cfg = new EventConfig();
// Keine Sperren beim Locking-Modell verwenden (nur single-threaded)
$cfg->setFlags(EventConfig::FLAG_NOLOCK);
$base = new EventBase($cfg);
// Einfaches Timer-Event registrieren
$event = new Event($base, -1, Event::TIMEOUT, function() use ($base) {
echo "Timer ausgelöst!" . PHP_EOL;
$base->exit();
});
$event->add(1.0); // nach 1 Sekunde auslösen
$base->dispatch();
?>
// Wichtig · Fallstricke
Achtung: EventConfig gehört zur PECL-Erweiterung event und ist nicht standardmäßig in PHP enthalten. Sie muss über PECL installiert werden (pecl install event).
- Das Konfigurations-Objekt sollte nach der Übergabe an
EventBasenicht mehr verändert werden — Änderungen haben auf die bereits erstellteEventBasekeinen Effekt mehr. - Wird mit
requireFeatures()ein Feature verlangt, das kein verfügbares Backend unterstützt, schlägt die Erstellung derEventBasefehl. - In Multi-Thread-Umgebungen sollte
FLAG_NOLOCKnicht gesetzt werden, da dies zu Race Conditions führen kann. - Die Klasse ist als
finaldeklariert und kann nicht erweitert werden.