Start · Sprachen · PHP · Referenz · EventConfig

EventConfig

Klasse

Repräsentiert eine Konfigurationsstruktur zur Konstruktion einer <code>EventBase</code>.

seit PHP 1.2.6 Kategorie: io

Signatur

class EventConfig

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();
?>
Verwendetes Backend: epoll

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();
?>
Timer ausgelöst!

// 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 EventBase nicht mehr verändert werden — Änderungen haben auf die bereits erstellte EventBase keinen Effekt mehr.
  • Wird mit requireFeatures() ein Feature verlangt, das kein verfügbares Backend unterstützt, schlägt die Erstellung der EventBase fehl.
  • In Multi-Thread-Umgebungen sollte FLAG_NOLOCK nicht gesetzt werden, da dies zu Race Conditions führen kann.
  • Die Klasse ist als final deklariert und kann nicht erweitert werden.