Start · Sprachen · PHP · Referenz · StompFrame

StompFrame

Klasse

Repräsentiert einen einzelnen STOMP-Protokollframe mit Befehl, Headern und Nachrichtenrumpf.

seit PHP 0.1.0 Kategorie: misc

Signatur

class StompFrame

Beschreibung

StompFrame ist eine Datenklasse der PECL-Stomp-Erweiterung und kapselt einen vollständigen Frame des STOMP-Protokolls (Simple Text Oriented Messaging Protocol). Ein Frame besteht aus einem Befehl (Command, z. B. SEND, MESSAGE, SUBSCRIBE), einem assoziativen Array von Headern sowie einem optionalen Nachrichtenrumpf (Body).

Objekte dieser Klasse werden sowohl beim Senden als auch beim Empfangen von Nachrichten über eine Stomp-Verbindung verwendet. Beim Lesen einer Nachricht mit Stomp::readFrame() gibt die Methode ein StompFrame-Objekt zurück, dessen Eigenschaften ausgewertet werden können. Beim Senden kann ein StompFrame-Objekt direkt an Stomp::send() übergeben werden.

Die Klasse ist bewusst einfach gehalten: Sie besitzt drei öffentliche Eigenschaften (command, headers, body) sowie einen Konstruktor, der deren Initialbelegung erlaubt. Es existieren keine komplexen Methoden; die eigentliche Kommunikationslogik verbleibt in der Stomp-Klasse.

STOMP wird häufig in Verbindung mit Nachrichtenbroekern wie Apache ActiveMQ oder RabbitMQ eingesetzt, um sprachunabhängige, nachrichtenbasierte Kommunikation zu ermöglichen.

Parameter

Name Typ Default Beschreibung
$command string Der STOMP-Befehl des Frames, z. B. SEND, SUBSCRIBE oder MESSAGE.
$headers array [] Assoziatives Array mit Frame-Headern, z. B. ['destination' => '/queue/test', 'content-type' => 'text/plain'].
$body string Der Nachrichtenrumpf (Payload) des Frames als Zeichenkette.

Beispiele

StompFrame manuell erstellen und senden

<?php
// Verbindung zum Broker herstellen
$stomp = new Stomp('tcp://localhost:61613');

// Frame manuell erzeugen
$frame = new StompFrame(
    'SEND',
    ['destination' => '/queue/bestellungen', 'content-type' => 'text/plain'],
    'Bestellung #1042: 3x Artikel A'
);

// Frame senden
$stomp->send('/queue/bestellungen', $frame->body, $frame->headers);

echo "Frame gesendet: " . $frame->command . PHP_EOL;
echo "Ziel: " . $frame->headers['destination'] . PHP_EOL;
echo "Inhalt: " . $frame->body . PHP_EOL;

unset($stomp);
Frame gesendet: SEND Ziel: /queue/bestellungen Inhalt: Bestellung #1042: 3x Artikel A

Empfangenen Frame auswerten

<?php
$stomp = new Stomp('tcp://localhost:61613');

// Queue abonnieren
$stomp->subscribe('/queue/bestellungen');

// Auf eingehende Nachricht warten
if ($stomp->hasFrame()) {
    /** @var StompFrame $frame */
    $frame = $stomp->readFrame();

    if ($frame instanceof StompFrame) {
        echo "Befehl : " . $frame->command . PHP_EOL;
        echo "Body   : " . $frame->body . PHP_EOL;

        // Nachricht bestätigen (ACK)
        if (isset($frame->headers['message-id'])) {
            $stomp->ack($frame);
        }
    }
}

$stomp->unsubscribe('/queue/bestellungen');
unset($stomp);
Befehl : MESSAGE Body : Bestellung #1042: 3x Artikel A

// Wichtig · Fallstricke

Erweiterung erforderlich: StompFrame ist Teil der PECL-Stomp-Erweiterung, die separat installiert werden muss (pecl install stomp). Sie ist nicht im PHP-Kern enthalten.

Öffentliche Eigenschaften: Die Eigenschaften command, headers und body sind direkt les- und schreibbar. Validierungen finden nicht automatisch statt – ungültige Befehlsnamen führen erst beim Senden zu Fehlern.

Sicherheit: Empfangene Frame-Daten sollten vor der Weiterverarbeitung stets validiert und – wenn sie in HTML ausgegeben werden – mit htmlspecialchars() gesichert werden, da der Body beliebige Zeichen enthalten kann.

Deprecated-Hinweis: Die prozedurale STOMP-API (stomp_connect() etc.) ist veraltet; die objektorientierte Verwendung über Stomp und StompFrame wird bevorzugt.