Signatur
Beschreibung
swoole_event_exit() beendet die interne Ereignisschleife (Event Loop) von Swoole. Die Funktion ist ausschließlich im Client-Kontext verfügbar, also z. B. in normalen PHP-Skripten, die Swoole-Client-Funktionalitäten nutzen, nicht jedoch innerhalb eines Swoole-Server-Callbacks.
Im typischen Einsatz wird die Ereignisschleife automatisch gestartet, sobald swoole_event_add() oder ähnliche Funktionen aufgerufen werden, die asynchrone I/O initiieren. swoole_event_exit() erlaubt es, diese Schleife kontrolliert zu beenden, wenn keine weiteren Ereignisse mehr verarbeitet werden sollen.
Nach dem Aufruf dieser Funktion werden alle noch ausstehenden Ereignisse und Timer nicht mehr ausgeführt. Das Skript setzt die Ausführung nach dem Blockier-Punkt fort, sofern vorhanden, und gibt danach alle internen Ressourcen frei. Dies ist nützlich, wenn man in einem skriptbasierten Kontext genau steuern möchte, wann die asynchrone Verarbeitung endet.
Hinweis: Diese Funktion gehört zur prozeduralen Swoole-API. In modernen Anwendungen (Swoole 4.x+) wird stattdessen oft der koroutinen-basierte Stil mit Swoole\Coroutine\run() empfohlen.
Rückgabewert
Beispiele
Asynchrone Client-Verbindung mit kontrolliertem Exit
<?php
// Asynchronen Client erstellen
$client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on('connect', function (Swoole\Client $client) {
echo "Verbunden mit dem Server." . PHP_EOL;
$client->send("Hallo Server!");
});
$client->on('receive', function (Swoole\Client $client, string $data) {
echo "Empfangen: " . $data . PHP_EOL;
$client->close();
// Ereignisschleife beenden, da keine weiteren Ereignisse erwartet werden
swoole_event_exit();
});
$client->on('error', function (Swoole\Client $client) {
echo "Verbindungsfehler!" . PHP_EOL;
swoole_event_exit();
});
$client->on('close', function (Swoole\Client $client) {
echo "Verbindung geschlossen." . PHP_EOL;
});
$client->connect('127.0.0.1', 9501);
echo "Skript wird nach swoole_event_exit() fortgesetzt." . PHP_EOL;
Ereignisschleife mit Timer und Exit nach Ablauf
<?php
$counter = 0;
// Timer alle 500 ms auslösen
$timerId = swoole_timer_tick(500, function () use (&$counter, &$timerId) {
$counter++;
echo "Timer-Tick #{$counter}" . PHP_EOL;
if ($counter >= 3) {
swoole_timer_clear($timerId);
echo "Timer gestoppt. Ereignisschleife wird beendet." . PHP_EOL;
swoole_event_exit();
}
});
echo "Warte auf Timer..." . PHP_EOL;
// Wichtig · Fallstricke
Nur Client-Seite: swoole_event_exit() darf nicht innerhalb von Swoole-Server-Callbacks (z. B. onReceive, onConnect) aufgerufen werden. Dort würde der Aufruf zu unerwartetem Verhalten oder Abstürzen führen.
Ausstehende Ereignisse: Nach dem Aufruf werden keine weiteren Ereignisse, Timer oder I/O-Callbacks mehr ausgeführt. Stellen Sie sicher, dass alle notwendigen Aufräumarbeiten (z. B. Schließen von Verbindungen) vor dem Aufruf erledigt sind.
Modernere Alternative: In Swoole 4.x und höher wird der Einsatz von Koroutinen mit Swoole\Coroutine\run() empfohlen, der den Event Loop automatisch verwaltet und einen saubereren Code-Stil ermöglicht.