Start · Sprachen · PHP · Referenz · Swoole\Buffer

Swoole\Buffer

Klasse

Bietet einen veränderlichen, binär-sicheren Speicherpuffer für effizientes Lesen und Schreiben von Rohdaten in Swoole-Anwendungen.

seit PHP 1.7.0 Kategorie: misc

Signatur

class Swoole\Buffer

Beschreibung

Swoole\Buffer ist eine Klasse aus der Swoole-Erweiterung, die einen dynamisch wachsenden, veränderlichen Speicherpuffer bereitstellt. Im Gegensatz zu einfachen PHP-Strings ermöglicht sie effizientes Anhängen, Lesen und Verschieben von Daten, ohne bei jeder Operation eine neue Zeichenkette allozieren zu müssen.

Typische Einsatzgebiete sind die Zwischenspeicherung von Netzwerkdaten in asynchronen Server-Anwendungen, das Zusammensetzen von Binärprotokoll-Paketen sowie das schrittweise Auslesen von Datenpuffern ohne Kopieroperationen. Der interne Zeiger und die Offsets werden dabei von der Klasse selbst verwaltet.

Die Klasse ist besonders sinnvoll, wenn große Datenmengen stückweise eingelesen und erst nach vollständiger Verfügbarkeit weiterverarbeitet werden sollen – ein häufiges Muster in TCP-basierten Protokollen. Durch die Verwaltung eines internen Schreib- und Lesezeigers können teilweise konsumierte Puffer korrekt weitergeführt werden, ohne Daten doppelt zu kopieren.

Hinweis: Swoole\Buffer ist in neueren Swoole-Versionen (ab 4.x) als veraltet markiert und wurde in Swoole 5.x entfernt. Für neue Projekte sollte stattdessen auf native Swoole-Coroutine-APIs oder Swoole\Coroutine\Channel zurückgegriffen werden.

Parameter

Name Typ Default Beschreibung
$size int 128 Initiale Größe des Pufferspeichers in Bytes. Der Puffer wächst bei Bedarf automatisch. Ein größerer Startwert kann unnötige Reallokierungen vermeiden.

Rückgabewert

Typ

Beispiele

Daten schreiben und vollständig lesen

<?php
// Neuen Puffer mit 256 Byte Startgröße erstellen
$buffer = new Swoole\Buffer(256);

// Daten anhängen
$buffer->append('Hallo, ');
$buffer->append('Welt!');

// Gesamte Länge des Puffers ausgeben
echo 'Länge: ' . $buffer->length . PHP_EOL;

// Alle Daten lesen (ab Offset 0)
$data = $buffer->read(0, $buffer->length);
echo 'Inhalt: ' . $data . PHP_EOL;
Länge: 12 Inhalt: Hallo, Welt!

Teilweises Lesen und Verbrauch von Pufferdaten (Sliding-Window)

<?php
$buffer = new Swoole\Buffer();

// Simulierter Empfang von Netzwerkdaten
$buffer->append(pack('N', 5));  // 4-Byte-Längenfeld: Wert 5
$buffer->append('Hello');        // 5 Byte Nutzlast

// Längenfeld lesen (erste 4 Bytes)
$header = $buffer->read(0, 4);
$bodyLen = unpack('N', $header)[1];
echo 'Erwartete Nutzlastlänge: ' . $bodyLen . PHP_EOL;

// Nutzlast lesen
$body = $buffer->read(4, $bodyLen);
echo 'Nutzlast: ' . $body . PHP_EOL;

// Gelesene Daten aus dem Puffer entfernen
$buffer->substr(0, 4 + $bodyLen, true);
echo 'Verbleibende Pufferlänge: ' . $buffer->length . PHP_EOL;
Erwartete Nutzlastlänge: 5 Nutzlast: Hello Verbleibende Pufferlänge: 0

// Wichtig · Fallstricke

Deprecation: Swoole\Buffer wurde in Swoole 4.x als veraltet markiert und in Swoole 5.0 vollständig entfernt. Bestehender Code sollte auf alternative Mechanismen migriert werden.

  • Die Klasse ist nicht threadsicher. Bei Verwendung in Multi-Process-Szenarien muss jeder Worker seinen eigenen Puffer besitzen.
  • Das Lesen über die tatsächliche Pufferlänge hinaus kann zu undefinierten Ergebnissen oder Fehlern führen – die Länge sollte stets geprüft werden.
  • Bei binären Daten ist darauf zu achten, dass PHP-interne String-Funktionen die Daten korrekt behandeln; Swoole\Buffer selbst ist binär-sicher.
  • Der Konstruktor-Parameter size ist nur ein Hinweis für die initiale Allokierung; der Puffer wächst automatisch, was jedoch zu Reallokierungen führen kann.