Ga naar inhoud

Workerveilige sessielevenscyclus via NextPDF Connect

Gebruik een verzoekgebonden sessielevenscyclus in een langlopende PHP-worker (RoadRunner, Swoole, Laravel Octane). Elk verzoek maakt zijn eigen documentsessie aan en verwijdert die na output_pdf. De status van het lettertype, de pagina en de handle blijft binnen de verzoekgrens van de worker. De tools zijn create_pdf, set_font, add_text en output_pdf — allemaal Core.

Terminal window
composer require nextpdf/server

Bind een transport. Dit patroon werkt op dezelfde manier met elk transport.

Een document_id is een ondoorzichtige handle die aan één verzoek is gebonden. Volg één regel: maak per verzoek aan, verwijder per verzoek, cache of deel nooit. Met de standaardinstelling destroy: true rendert output_pdf het document en geeft het de sessie vrij in één atomaire stap. Het volgende verzoek op dezelfde worker krijgt een nieuwe, onafhankelijke sessie. Het lettertype en de inhoud van de vorige sessie zijn dan weg. Elk toolresultaat is een normaal transportantwoord (PSR-18 §p2). De servercode is geïsoleerd door de autoload-grens (PSR-4 §3). De sessieopslag is de enige status die verzoeken overspant, en die is gesleuteld op id.

ToolRolRisiconiveau
create_pdfEen verzoekgebonden sessie openenVeilig
set_fontHet actieve lettertype instellen (per sessie)Let op
add_textInhoud schrijvenLet op
output_pdfDe sessie renderen en verwijderenGoedkeuring vereist / Review (base64)

De toolcatalogus is de bron van waarheid. Welke tools je kunt gebruiken, hangt af van het geïnstalleerde niveau.

Verzoek 1: create_pdfset_fontadd_textoutput_pdf (destroy: true). Verzoek 2 op dezelfde worker start een nieuwe create_pdf-sessie. De oude id is dan ongeldig. Stel het lettertype opnieuw in, want het wordt niet overgenomen.

Verpak de levenscyclus zo dat de opruiming altijd wordt uitgevoerd:

  • Vraag de sessie aan wanneer het verzoek start.
  • Bouw de inhoud op.
  • Roep in een finally-equivalent blok output_pdf aan; daarmee wordt de sessie verwijderd. Als je destroy: false hebt gebruikt voor een inspect-after-output-stroom, verwijder de sessie dan in plaats daarvan expliciet.

Bewaar een document_id nooit in een worker-globale, statische of gedeelde container. Geef het nooit door tussen coroutines, fibers of verzoekhandlers.

  • Hergebruikte id na verwijderen. Geeft een fout voor een onbekend document terug. Maak per verzoek een nieuwe sessie aan.
  • Vergeten output_pdf. Het geheugen groeit ongemerkt totdat de TTL van de sessie verloopt of het proces opnieuw start. Rond altijd af.
  • Sessielimiet onder belasting. De opslag heeft een limiet op gelijktijdigheid. Door snel te verwijderen blijf je eronder.
  • destroy: false zonder opruiming. Het geheugen groeit geleidelijk. Gebruik het alleen voor een expliciete inspect-after-output-stroom en verwijder daarna de sessie.
  • Gedeelde id over gelijktijdige verzoeken. Dit veroorzaakt een race die de uitvoer beschadigt. Elk verzoek bezit zijn eigen sessie.

De uitvoer per verzoek bedraagt enkele KB. Het voordeel is begrensd workergeheugen gedurende de levensduur van de worker. Het profiel is structural.

Sessie-isolatie is ook een vertrouwelijkheidseigenschap. De inhoud van één verzoek bereikt nooit een ander verzoek, omdat handles niet worden gedeeld en de sessie bij uitvoer wordt verwijderd.

VerklaringSpecClausulereference_id
Elk toolresultaat is een normaal transportantwoord.PSR-18§p2
Code is geïsoleerd door de autoload-mapping van klasse→bestand.PSR-4§3

Niet van toepassing — alle tools zijn Core.

TransportBeschikbaarNotities
MCP (stdio)JaEén stdio-proces per worker is gebruikelijk.
RESTJaDe grens van het HTTP-verzoek wordt toegewezen aan de sessiegrens.
gRPCJaEén sessie per RPC-reeks.

create_pdf is Safe. set_font en add_text zijn Caution. output_pdf is Approval Required, in base64-modus afgewaardeerd naar Review. In een worker is base64-uitvoer het gebruikelijke pad en voegt het geen bevestigingspoort toe (HITL-risiconiveaus).

Base64-workeruitvoer:

{ "allowed": true }