Start · Sprachen · PHP · Referenz · stomp_set_read_timeout

stomp_set_read_timeout

Funktion

Setzt das Lese-Timeout für eine Stomp-Verbindung in Sekunden und optional Mikrosekunden.

seit PHP 0.1.0 Kategorie: misc

Signatur

stomp_set_read_timeout(resource $link, int $seconds, int $microseconds = 0): void

Beschreibung

stomp_set_read_timeout() legt fest, wie lange eine Stomp-Verbindung beim Lesen auf eine Antwort vom Broker warten darf, bevor die Operation abbricht. Sie ist das prozedurale Pendant zur objektorientierten Methode Stomp::setReadTimeout().

Das Timeout besteht aus zwei Teilen: einem ganzzahligen Sekundenwert ($seconds) und einem optionalen Mikrosekunden-Anteil ($microseconds). Beide Werte werden addiert, sodass auch feingranulare Zeitlimits wie z. B. 500 ms (= 0 Sekunden + 500 000 Mikrosekunden) möglich sind.

Ein sinnvoll gesetztes Lese-Timeout verhindert, dass ein PHP-Prozess unendlich auf eine Antwort eines nicht erreichbaren Message-Brokers (z. B. ActiveMQ oder RabbitMQ) wartet. Dies ist besonders bei zeitkritischen Web-Requests oder Worker-Prozessen wichtig, um Hänger und Ressourcen-Blockierungen zu vermeiden.

Die Funktion gehört zur PECL stomp-Erweiterung und erfordert, dass diese installiert und geladen ist. Ab PHP 7 und neueren PECL-Versionen wird die objektorientierte API bevorzugt empfohlen.

Parameter

Name Typ Default Beschreibung
$link Pflicht resource Eine gültige Stomp-Verbindungsressource, wie sie von stomp_connect() zurückgegeben wird.
$seconds Pflicht int Timeout-Anteil in ganzen Sekunden. Muss >= 0 sein.
$microseconds int 0 Optionaler Timeout-Anteil in Mikrosekunden (1 Sekunde = 1 000 000 Mikrosekunden). Wird zum Sekundenwert addiert.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Lese-Timeout auf 2 Sekunden setzen

<?php
// Verbindung zum Stomp-Broker herstellen
$link = stomp_connect('tcp://localhost:61613');

if ($link === false) {
    die('Verbindung fehlgeschlagen: ' . stomp_connect_error());
}

// Lese-Timeout auf 2 Sekunden setzen
stomp_set_read_timeout($link, 2);

// Nachricht abonnieren und lesen
stomp_subscribe($link, '/queue/test');

if (stomp_has_frame($link)) {
    $frame = stomp_read_frame($link);
    echo 'Empfangen: ' . $frame['body'] . PHP_EOL;
} else {
    echo 'Keine Nachricht innerhalb des Timeouts erhalten.' . PHP_EOL;
}

stomp_close($link);
Keine Nachricht innerhalb des Timeouts erhalten.

Feingranulares Timeout mit Mikrosekunden (500 ms)

<?php
$link = stomp_connect('tcp://localhost:61613');

if ($link === false) {
    die('Verbindung fehlgeschlagen: ' . stomp_connect_error());
}

// Timeout auf 500 Millisekunden setzen (0 Sekunden + 500.000 Mikrosekunden)
stomp_set_read_timeout($link, 0, 500000);

stomp_subscribe($link, '/queue/orders');

if (stomp_has_frame($link)) {
    $frame = stomp_read_frame($link);
    echo 'Bestellung empfangen: ' . $frame['body'] . PHP_EOL;
} else {
    echo 'Timeout nach 500 ms — kein Frame verfügbar.' . PHP_EOL;
}

stomp_close($link);
Timeout nach 500 ms — kein Frame verfügbar.

// Wichtig · Fallstricke

PECL-Abhängigkeit: Diese Funktion ist nicht Teil des PHP-Kerns, sondern der PECL stomp-Erweiterung. Sie muss separat installiert werden (pecl install stomp).

Objektorientierte Alternative: In OOP-Projekten sollte stattdessen Stomp::setReadTimeout(int $seconds, int $microseconds) verwendet werden, da die prozedurale API als veraltet gilt.

Zu kurze Timeouts: Sehr kleine Timeout-Werte (z. B. wenige Millisekunden) können dazu führen, dass unter Last reguläre Antworten fälschlicherweise als Timeout gewertet werden. Den Wert anhand der tatsächlichen Broker-Latenz kalibrieren.