Signatur
Beschreibung
Yar_Client ist der zentrale Bestandteil der Yar-Erweiterung (Yet Another RPC Framework) und ermöglicht es, entfernte Prozeduren auf einem Yar_Server aufzurufen, als handele es sich um lokale Methoden. Der Client baut eine Verbindung zur angegebenen URL auf und serialisiert Anfragen sowie Antworten automatisch.
Der Aufruf entfernter Methoden erfolgt durch einfaches Aufrufen von nicht vorhandenen Methoden auf dem Yar_Client-Objekt – PHP leitet diese über __call() an den Server weiter. Dabei werden Parameter übergeben und der Rückgabewert des Servers direkt zurückgeliefert. Schlägt ein Aufruf fehl, wird eine Yar_Client_Exception geworfen.
Über die Methode setOpt() lassen sich verschiedene Optionen konfigurieren, wie z. B. Timeouts, HTTP-Header oder der verwendete Packer (JSON, Msgpack etc.). Für parallele, nicht-blockierende Aufrufe steht die statische Methode Yar_Concurrent_Client::call() zur Verfügung.
Hinweis: Die Yar-Erweiterung muss separat installiert werden (pecl install yar) und setzt libcurl voraus. Sie ist vor allem für Microservice-Architekturen und interne API-Kommunikation geeignet, bei der Geschwindigkeit und einfache Integration im Vordergrund stehen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $url Pflicht | string | Die URL des entfernten Yar-Servers, z. B. http://example.com/service.php. Der Server muss eine Yar_Server-Instanz betreiben. |
Rückgabewert
Beispiele
Einfacher RPC-Aufruf mit Yar_Client
<?php
// Serverseitiger Code (service.php):
// class MathService {
// public function add(int $a, int $b): int { return $a + $b; }
// }
// $server = new Yar_Server(new MathService());
// $server->handle();
// Clientseitiger Code:
try {
$client = new Yar_Client('http://example.com/service.php');
// Entfernte Methode 'add' aufrufen
$result = $client->add(3, 7);
echo 'Ergebnis: ' . $result . PHP_EOL;
} catch (Yar_Client_Exception $e) {
echo 'RPC-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Yar_Client mit Timeout- und Header-Optionen konfigurieren
<?php
try {
$client = new Yar_Client('http://example.com/service.php');
// Verbindungs-Timeout auf 1 Sekunde setzen
$client->setOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);
// Gesamter Request-Timeout auf 5 Sekunden
$client->setOpt(YAR_OPT_TIMEOUT, 5000);
// Packer auf JSON setzen (Standard: Msgpack falls verfügbar)
$client->setOpt(YAR_OPT_PACKAGER, 'JSON');
// Benutzerdefinierte HTTP-Header
$client->setOpt(YAR_OPT_HEADER, [
'X-Auth-Token: geheimestoken123',
]);
$userInfo = $client->getUserById(42);
var_dump($userInfo);
} catch (Yar_Client_Exception $e) {
echo 'Fehler (' . $e->getType() . '): ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Übertragen Sie sensible Daten ausschließlich über HTTPS, da Yar standardmäßig keine Transportverschlüsselung hinzufügt. Validieren Sie außerdem alle vom Server zurückgegebenen Daten, bevor Sie diese weiterverwenden.
Fehlerbehandlung: Nicht erreichbare Server oder Methodenfehler werden als Yar_Client_Exception geworfen. Unterscheiden Sie mit getType() zwischen Netzwerkfehlern (YAR_ERR_TRANSPORT) und serverseitigen Ausnahmen (YAR_ERR_REQUEST).
Kompatibilität: Server und Client müssen denselben Packer verwenden, sonst schlägt die Deserialisierung fehl. Wird Msgpack genutzt, muss die msgpack-PECL-Erweiterung auf beiden Seiten installiert sein.