Start · Sprachen · PHP · Referenz · Yar_Client_Protocol_Exception

Yar_Client_Protocol_Exception

Klasse

Wird ausgelöst, wenn auf der Yar-Clientseite ein Protokollfehler auftritt, z. B. bei ungültigem oder korruptem RPC-Protokoll.

seit PHP 2.0.0 Kategorie: error

Signatur

class Yar_Client_Protocol_Exception extends Yar_Client_Exception

Beschreibung

Yar_Client_Protocol_Exception ist eine Ausnahme, die von der Yar-Erweiterung geworfen wird, wenn bei der Kommunikation zwischen Yar-Client und -Server ein Protokollfehler auftritt. Dies kann beispielsweise passieren, wenn die empfangene Antwort nicht dem erwarteten Yar-Protokollformat entspricht, das Paket beschädigt ist oder ein inkompatibles Protokoll verwendet wird.

Diese Klasse erbt von Yar_Client_Exception, die ihrerseits von der eingebauten PHP-Klasse Exception erbt. Daher stehen alle Standard-Exception-Methoden wie getMessage(), getCode() und getTrace() zur Verfügung.

Ein typischer Einsatz ist das gezielte Abfangen von Protokollfehlern in einem try/catch-Block, um diese separat von anderen Yar-Fehlern oder allgemeinen Ausnahmen behandeln zu können. Dies ist besonders nützlich, wenn Debugging-Informationen zum Protokoll benötigt werden oder eine spezifische Fehlerbehandlung für Protokollinkompatibilitäten implementiert werden soll.

Die Yar-Erweiterung (Yet Another RPC Framework) ermöglicht schnelle und einfache RPC-Kommunikation in PHP. Protokollfehler sind in der Regel schwerwiegend und deuten auf ein grundlegendes Kommunikationsproblem hin, das nicht durch einen einfachen Neuversuch behoben werden kann.

Beispiele

Protokollfehler gezielt abfangen

<?php
try {
    $client = new Yar_Client('http://example.com/yar_server.php');
    $result = $client->someRemoteMethod('arg1', 'arg2');
    echo $result;
} catch (Yar_Client_Protocol_Exception $e) {
    // Spezifische Behandlung von Protokollfehlern
    echo 'Protokollfehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
} catch (Yar_Client_Exception $e) {
    // Allgemeine Yar-Client-Fehler
    echo 'Yar-Client-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    // Sonstige Ausnahmen
    echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
Protokollfehler: Response payload is corrupted Fehlercode: 4

Mehrere Yar-Ausnahmetypen hierarchisch abfangen

<?php
function callRemoteService(string $method, array $args): mixed {
    $client = new Yar_Client('http://api.example.com/rpc');
    try {
        return $client->$method(...$args);
    } catch (Yar_Client_Protocol_Exception $e) {
        // Protokollfehler: Kommunikation grundlegend gestört
        error_log('[YAR PROTOCOL ERROR] ' . $e->getMessage() . ' (Code: ' . $e->getCode() . ')');
        throw new RuntimeException('Dienst antwortet mit ungültigem Protokoll.', 0, $e);
    } catch (Yar_Server_Exception $e) {
        // Fehler auf Serverseite
        error_log('[YAR SERVER ERROR] ' . $e->getMessage());
        throw new RuntimeException('Serverfehler beim RPC-Aufruf.', 0, $e);
    } catch (Yar_Client_Exception $e) {
        // Sonstige Client-Fehler (z. B. Verbindungsfehler)
        error_log('[YAR CLIENT ERROR] ' . $e->getMessage());
        throw new RuntimeException('Verbindungsfehler beim RPC-Aufruf.', 0, $e);
    }
}

try {
    $result = callRemoteService('getUserById', [42]);
    var_dump($result);
} catch (RuntimeException $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
Fehler: Dienst antwortet mit ungültigem Protokoll.

// Wichtig · Fallstricke

Yar-Erweiterung erforderlich: Yar_Client_Protocol_Exception ist nur verfügbar, wenn die PHP-Erweiterung yar installiert und aktiviert ist. Sie ist nicht Bestandteil des PHP-Kerns und muss über PECL installiert werden.

Fehlercodes: Der Fehlercode (abrufbar via getCode()) entspricht einem internen Yar-Fehlercode. Protokollfehler haben typischerweise den Code 4 (YAR_ERR_PROTOCOL). Die genauen Codes können je nach Yar-Version variieren.

Nicht wiederholbar: Protokollfehler sind in der Regel nicht durch einen einfachen Neuversuch behebbar, da sie auf eine grundlegende Inkompatibilität oder Datenbeschädigung hinweisen. Es empfiehlt sich, den Fehler zu protokollieren und den Nutzer über das Problem zu informieren, anstatt automatisch zu wiederholen.