Workerveilige sessielevenscyclus via NextPDF Connect
In een oogopslag
Sectie met titel “In een oogopslag”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.
Installeren
Sectie met titel “Installeren”composer require nextpdf/serverBind een transport. Dit patroon werkt op dezelfde manier met elk transport.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”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.
API-oppervlak
Sectie met titel “API-oppervlak”| Tool | Rol | Risiconiveau |
|---|---|---|
create_pdf | Een verzoekgebonden sessie openen | Veilig |
set_font | Het actieve lettertype instellen (per sessie) | Let op |
add_text | Inhoud schrijven | Let op |
output_pdf | De sessie renderen en verwijderen | Goedkeuring vereist / Review (base64) |
De toolcatalogus is de bron van waarheid. Welke tools je kunt gebruiken, hangt af van het geïnstalleerde niveau.
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”Verzoek 1: create_pdf → set_font → add_text → output_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.
Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”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 blokoutput_pdfaan; daarmee wordt de sessie verwijderd. Als jedestroy: falsehebt 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.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- 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: falsezonder 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.
Prestaties
Sectie met titel “Prestaties”De uitvoer per verzoek bedraagt enkele KB. Het voordeel is begrensd workergeheugen gedurende de levensduur van de worker. Het profiel is structural.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”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.
Conformiteit
Sectie met titel “Conformiteit”| Verklaring | Spec | Clausule | reference_id |
|---|---|---|---|
| Elk toolresultaat is een normaal transportantwoord. | PSR-18 | §p2 | |
| Code is geïsoleerd door de autoload-mapping van klasse→bestand. | PSR-4 | §3 |
Commerciële context
Sectie met titel “Commerciële context”Niet van toepassing — alle tools zijn Core.
Beschikbaarheid van transporten
Sectie met titel “Beschikbaarheid van transporten”| Transport | Beschikbaar | Notities |
|---|---|---|
| MCP (stdio) | Ja | Eén stdio-proces per worker is gebruikelijk. |
| REST | Ja | De grens van het HTTP-verzoek wordt toegewezen aan de sessiegrens. |
| gRPC | Ja | Eén sessie per RPC-reeks. |
HITL-risiconiveau
Sectie met titel “HITL-risiconiveau”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).
JSON-envelop van de bevestigingspoort
Sectie met titel “JSON-envelop van de bevestigingspoort”Base64-workeruitvoer:
{ "allowed": true }