Signatur
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
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);
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);
// 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.