Signatur
Beschreibung
swoole_event_wait() startet die interne Event-Loop von Swoole und blockiert die weitere Ausführung des Skripts, bis keine aktiven Ereignis-Handler mehr vorhanden sind. Sie wird typischerweise am Ende eines Skripts aufgerufen, das asynchrone I/O-Operationen, Timer oder andere nicht-blockierende Swoole-Features nutzt.
Ohne diesen Aufruf würde ein PHP-Skript sofort nach dem Registrieren asynchroner Callbacks beenden, noch bevor diese ausgeführt werden konnten. swoole_event_wait() hält den Prozess am Leben und gibt der Ereignisschleife Zeit, alle ausstehenden Ereignisse zu verarbeiten.
Diese Funktion ist besonders nützlich in reinen PHP-Skripten (ohne einen Swoole-Server), wenn man einzelne asynchrone Operationen – etwa TCP-Client-Verbindungen, Datei-I/O oder Timer – ausprobieren oder einsetzen möchte. Im Kontext eines laufenden Swoole\Server oder Swoole\Coroutine\run() ist sie in der Regel nicht notwendig, da diese ihre eigene Event-Loop verwalten.
Nach dem Beenden aller registrierten Ereignisse kehrt die Funktion zurück und das Skript wird normal fortgesetzt bzw. beendet.
Rückgabewert
Beispiele
Asynchroner TCP-Client mit Event-Loop
<?php
// Asynchrone TCP-Verbindung zu einem Echo-Server
$socket = swoole_event_add(
stream_socket_client('tcp://127.0.0.1:9501', $errno, $errstr, 30),
function ($socket) {
$data = fread($socket, 8192);
echo "Empfangen: " . $data . PHP_EOL;
swoole_event_del($socket);
fclose($socket);
}
);
// Event-Loop starten – blockiert bis alle Ereignisse abgearbeitet sind
swoole_event_wait();
echo "Event-Loop beendet." . PHP_EOL;
Timer-basiertes Beispiel mit swoole_event_wait
<?php
// Führe einen einmaligen Timer nach 1 Sekunde aus
swoole_timer_after(1000, function () {
echo "Timer ausgelöst nach 1 Sekunde." . PHP_EOL;
});
echo "Warte auf Timer..." . PHP_EOL;
// Blockiert, bis der Timer abgelaufen und sein Callback ausgeführt wurde
swoole_event_wait();
echo "Fertig." . PHP_EOL;
// Wichtig · Fallstricke
Achtung: swoole_event_wait() sollte nicht innerhalb einer Coroutine oder eines laufenden Swoole-Servers aufgerufen werden, da dort bereits eine eigene Event-Loop aktiv ist. Ein verschachtelter Aufruf kann zu unerwartetem Verhalten oder Deadlocks führen.
Die Funktion ist Teil der prozeduralen Swoole-API. Bei Verwendung des objektorientierten Stils (Swoole\Event::wait()) steht die identische Funktionalität als statische Methode zur Verfügung.
Da Swoole eine PECL-Extension ist, muss sie separat installiert und in der php.ini geladen werden. Die Funktion steht nicht in einer Standard-PHP-Installation zur Verfügung.