Start · Sprachen · PHP · Referenz · ZMQPollException

ZMQPollException

Klasse

Wird bei einem Fehler beim Polling von <code>ZMQ</code>-Sockets ausgelöst und enthält Fehlerinformationen zum gescheiterten Poll-Vorgang.

Kategorie: error

Signatur

class ZMQPollException extends ZMQException

Beschreibung

ZMQPollException ist eine spezialisierte Ausnahmeklasse innerhalb der ZMQ-PHP-Extension (ZeroMQ). Sie wird geworfen, wenn bei einem Poll-Vorgang auf einem oder mehreren ZMQSocket-Objekten ein Fehler auftritt, der nicht durch den normalen Rückgabewert abgedeckt werden kann.

Typische Auslöser sind ungültige oder bereits geschlossene Sockets im Poll-Set, Ressourcenprobleme oder interne ZeroMQ-Fehler während des Wartevorgangs auf Ereignisse. Die Klasse erbt von ZMQException, welche selbst RuntimeException erweitert, sodass alle bekannten Exception-Methoden wie getMessage(), getCode() und getTrace() zur Verfügung stehen.

In der Praxis sollte jeder Poll-Aufruf über ZMQPoll::poll() in einem try-catch-Block abgesichert werden, der sowohl ZMQPollException als auch allgemeine ZMQException-Fälle behandelt. Der Fehlercode entspricht in der Regel dem systemnahen errno-Wert aus der zugrundeliegenden libzmq-Bibliothek.

Beispiele

Abfangen eines Poll-Fehlers mit ZMQPollException

<?php
$context = new ZMQContext();
$socket  = $context->getSocket(ZMQ::SOCKET_REP);
$socket->bind('tcp://127.0.0.1:5555');

$poll = new ZMQPoll();
$poll->add($socket, ZMQ::POLL_IN);

$readable = [];
$writable = [];

try {
    $events = $poll->poll($readable, $writable, 1000); // Timeout: 1000 ms
    echo 'Ereignisse: ' . $events . PHP_EOL;
} catch (ZMQPollException $e) {
    echo 'Poll-Fehler [Code ' . $e->getCode() . ']: ' . $e->getMessage() . PHP_EOL;
} catch (ZMQException $e) {
    echo 'Allgemeiner ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Ereignisse: 0

Mehrere Sockets polllen und Ausnahme behandeln

<?php
$context = new ZMQContext();
$push    = $context->getSocket(ZMQ::SOCKET_PUSH);
$pull    = $context->getSocket(ZMQ::SOCKET_PULL);

$push->bind('tcp://127.0.0.1:5556');
$pull->connect('tcp://127.0.0.1:5556');

$poll = new ZMQPoll();
$poll->add($pull, ZMQ::POLL_IN);

$push->send('Hallo ZMQ');

$readable = [];
$writable = [];

try {
    $events = $poll->poll($readable, $writable, 500);
    foreach ($readable as $sock) {
        echo 'Empfangen: ' . $sock->recv() . PHP_EOL;
    }
} catch (ZMQPollException $e) {
    error_log('ZMQPollException: ' . $e->getMessage() . ' (errno=' . $e->getCode() . ')');
}
Empfangen: Hallo ZMQ

// Wichtig · Fallstricke

Fehlercode: Der über getCode() zurückgegebene Wert entspricht dem nativen errno-Wert der libzmq-Bibliothek. Typische Werte sind z. B. ETERM (Kontext wurde beendet) oder EFAULT (ungültiger Socket im Poll-Set).

Ressourcenverwaltung: Sockets, die aus dem Poll-Set entfernt oder bereits geschlossen wurden, können ZMQPollException auslösen. Stellen Sie sicher, dass Sockets beim Hinzufügen zu einem ZMQPoll-Objekt noch gültig und verbunden sind.

Hinweis zur Extension: Die zmq-PHP-Extension ist nicht Teil der PHP-Standarddistribution und muss über PECL installiert werden. Die Verfügbarkeit der Klasse hängt von der installierten Version ab.