Signatur
Beschreibung
swoole_async_dns_lookup gehört zur Swoole-Erweiterung für PHP und ermöglicht die nicht blockierende DNS-Auflösung. Anstatt den aktuellen Prozess oder Thread während der DNS-Anfrage anzuhalten (wie es gethostbyname tut), wird die Auflösung im Hintergrund durchgeführt. Sobald das Ergebnis vorliegt, wird die übergebene Callback-Funktion aufgerufen.
Diese Funktion ist besonders in Swoole-basierten Server-Anwendungen und asynchronen Event-Loop-Kontexten sinnvoll, wo blockierende I/O-Operationen den Durchsatz drastisch reduzieren würden. In einer synchronen PHP-Umgebung ohne Swooles Event-Loop ist der Nutzen hingegen begrenzt.
Der Callback erhält als Parameter den ursprünglichen Hostnamen sowie die aufgelöste IP-Adresse. Wenn die Auflösung fehlschlägt, wird die IP-Adresse als leerer String oder false übergeben. Es empfiehlt sich daher, im Callback stets auf Fehler zu prüfen.
Hinweis: Diese Funktion ist als veraltet (deprecated) zu betrachten. In neueren Swoole-Versionen sollte stattdessen die coroutine-basierte DNS-Auflösung über Swoole\Coroutine\System::gethostbyname() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Der aufzulösende Hostname, z. B. 'www.example.com'. |
|
| $callback Pflicht | callable | Eine Callback-Funktion, die nach abgeschlossener DNS-Auflösung aufgerufen wird. Sie erhält zwei Parameter: string $hostname (der ursprüngliche Hostname) und string $ip (die aufgelöste IP-Adresse oder einen leeren String bei Fehler). |
Rückgabewert
true zurück, wenn die asynchrone Anfrage erfolgreich eingeleitet wurde, andernfalls false.Beispiele
Einfache asynchrone DNS-Auflösung
<?php
// Setzt eine laufende Swoole-Umgebung voraus
swoole_async_dns_lookup('www.example.com', function (string $hostname, string $ip) {
if (empty($ip)) {
echo "DNS-Auflösung für {$hostname} fehlgeschlagen.\n";
} else {
echo "Hostname: {$hostname} => IP: {$ip}\n";
}
});
// Der Event-Loop von Swoole läuft weiter und verarbeitet andere Ereignisse,
// bis der Callback aufgerufen wird.
Verwendung in einem Swoole-HTTP-Server
<?php
$server = new Swoole\Http\Server('0.0.0.0', 9501);
$server->on('request', function ($request, $response) {
$host = $request->get['host'] ?? 'www.example.com';
swoole_async_dns_lookup($host, function (string $hostname, string $ip) use ($response) {
if (empty($ip)) {
$response->status(500);
$response->end("DNS-Auflösung fehlgeschlagen für: {$hostname}");
} else {
$response->end("IP-Adresse von {$hostname}: {$ip}");
}
});
});
$server->start();
// Wichtig · Fallstricke
Deprecation: swoole_async_dns_lookup gilt in neueren Swoole-Versionen als veraltet. Es wird empfohlen, stattdessen Swoole\Coroutine\System::gethostbyname() innerhalb einer Coroutine zu verwenden, da dieser Ansatz moderner, wartbarer und besser in das Coroutine-Modell von Swoole integriert ist.
Nur im Event-Loop: Diese Funktion arbeitet nur korrekt innerhalb des Swoole-Event-Loops. Ein Aufruf außerhalb eines Swoole-Servers oder -Clients führt möglicherweise dazu, dass der Callback nie ausgeführt wird.
Sicherheit: Nutzereingaben, die als $hostname übergeben werden, sollten vor der Übergabe validiert werden, um unerwartetes Verhalten oder DNS-Rebinding-Angriffe zu vermeiden.