Zum Inhalt springen

Worker-sicherer Sitzungslebenszyklus mit NextPDF Connect

Verwenden Sie in einem langlaufenden PHP-Worker (RoadRunner, Swoole, Laravel Octane) den richtigen Sitzungslebenszyklus. Jede Anfrage erstellt eine eigene Dokumentsitzung und baut sie nach output_pdf wieder ab. Kein Schriftart-, Seiten- oder Handle-Zustand sickert über die Anfragegrenze des Workers hinaus. Die Tools sind create_pdf, set_font, add_text und output_pdf — alle gehören zu Core.

Terminal-Fenster
composer require nextpdf/server

Binden Sie einen Transport ein. Das Muster funktioniert bei jedem Transport gleich.

Eine document_id ist ein opakes Handle, das genau für eine Anfrage gültig ist. Die Regel lautet pro Anfrage erstellen, pro Anfrage abbauen, niemals zwischenspeichern oder teilen. Mit dem standardmäßigen destroy: true rendert output_pdf das Dokument und gibt die Sitzung in einem einzigen atomaren Schritt frei. Die nächste Anfrage auf demselben Worker erhält eine neue, unabhängige Sitzung. Schriftart und Inhalt der vorherigen Sitzung sind verschwunden. Jedes Tool-Ergebnis ist eine normale Transportantwort (PSR-18 §p2). Der Servercode selbst ist durch die Autoload-Grenze isoliert (PSR-4 §3). Der Sitzungsspeicher ist der einzige anfrageübergreifende Zustand und wird über die ID adressiert.

ToolRolleRisikostufe
create_pdfPro Anfrage eine Sitzung öffnenSicher
set_fontDie aktive Schriftart setzen (pro Sitzung)Vorsicht
add_textInhalt schreibenVorsicht
output_pdfDie Sitzung rendern und abbauenGenehmigung erforderlich / Review (Base64)

Der Tool-Katalog ist maßgeblich. Welche Tools Ihnen zur Verfügung stehen, hängt von der installierten Edition ab.

Anfrage 1: create_pdfset_fontadd_textoutput_pdf (destroy: true). Anfrage 2 auf demselben Worker startet eine neue create_pdf-Sitzung. Die alte ID ist nun ungültig. Setzen Sie die Schriftart erneut, denn sie wird nicht übernommen.

Kapseln Sie den Lebenszyklus so, dass die Bereinigung immer ausgeführt wird:

  • Erstellen Sie die Sitzung zu Beginn der Anfrage.
  • Bauen Sie den Inhalt auf.
  • Rufen Sie in einem zu finally äquivalenten Block output_pdf auf, damit die Sitzung abgebaut wird. Wenn Sie destroy: false für einen Ablauf mit Prüfung nach der Ausgabe verwendet haben, bauen Sie die Sitzung stattdessen explizit ab.

Speichern Sie eine document_id niemals in einer globalen Worker-Variablen, einer statischen Variablen oder einem geteilten Container. Geben Sie sie niemals zwischen Coroutinen, Fibers oder Anfrage-Handlern weiter.

  • Wiederverwendete ID nach dem Abbau. Dies gibt einen Unknown-Document-Fehler zurück. Erstellen Sie pro Anfrage eine neue Sitzung.
  • Vergessenes output_pdf. Der Speicher wächst unbemerkt, bis die TTL der Sitzung abläuft oder der Prozess neu startet. Schließen Sie immer ab.
  • Sitzungslimit unter Last. Der Speicher begrenzt die Anzahl gleichzeitiger Sitzungen. Ein zügiger Abbau hält Sie darunter.
  • destroy: false ohne Bereinigung. Der Speicher wächst allmählich. Verwenden Sie es nur für einen expliziten Ablauf mit Prüfung nach der Ausgabe und bauen Sie die Sitzung danach ab.
  • Geteilte ID über gleichzeitige Anfragen hinweg. Das ist eine Race-Condition, die die Ausgabe beschädigt. Jede Anfrage besitzt ihre eigene Sitzung.

Pro Anfrage umfasst die Ausgabe nur wenige KB. Der Vorteil ist ein über die gesamte Lebensdauer des Workers begrenzter Speicherbedarf. Das Profil ist structural.

Die Sitzungsisolation ist zugleich eine Vertraulichkeitseigenschaft. Der Inhalt einer Anfrage gelangt niemals in eine andere Anfrage, weil Handles nicht geteilt werden und die Sitzung bei der Ausgabe abgebaut wird.

AussageSpezifikationKlauselreference_id
Jedes Tool-Ergebnis ist eine normale Transportantwort.PSR-18§p2
Der Code ist über die Autoload-Zuordnung von Klasse zu Datei isoliert.PSR-4§3

Nicht zutreffend — alle Tools sind Core.

TransportVerfügbarHinweise
MCP (stdio)JaEin stdio-Prozess pro Worker ist üblich.
RESTJaDie HTTP-Anfragegrenze entspricht der Sitzungsgrenze.
gRPCJaEine Sitzung pro RPC-Sequenz.

create_pdf hat die Stufe Sicher. set_font und add_text haben die Stufe Vorsicht. output_pdf hat die Stufe Genehmigung erforderlich und wird im Base64-Modus auf Review herabgestuft. In einem Worker ist die Base64-Ausgabe der übliche Weg und löst kein Gate aus (HITL-Risikostufen).

Base64-Worker-Ausgabe:

{ "allowed": true }