4: Runtime helpers en planning
Twee consumenten rijden de daemon zonder dat je zelf /dispatch aanroept: de async runtime helpers en de scheduler.
4.1: De runtime helpers
De helpers van Phlo voor het uitvoeren van een doel buiten de band gebruiken allemaal de pool wanneer de app ervoor kiest, en vallen anders terug op een eenmalige subprocess:
| Helper | Doet |
|---|---|
phlo_sync('Class::method', ...$args) |
Voert een doel uit en wacht op de retourwaarde |
phlo_async('Class::method', ...$args) |
Plaatst een doel in de wachtrij voor een eenmalige uitvoering; retourneert zodra het is geaccepteerd |
await($job, $job, ...) |
Voert veel doelen gelijktijdig uit en verzamelt hun resultaten |
phlo_stream('Class::method', ...$args) |
Geeft de uitvoer van een doel regel voor regel terug |
De opt-in is één constante in het app-entrypoint:
phlo_app(
id: 'Api',
host: 'api.example.com',
daemon: 3001,
);
Met daemon ingesteld, dispatchen de helpers via het app pad naar de pool; zonder het, starten ze een eenmalig proces precies zoals voorheen. De app-code is in beide gevallen identiek, dus het aannemen van de daemon verandert alleen de doorvoer.
De winst is het grootst wanneer één verzoek zich verspreidt. await() over honderd taken is honderd app-opstarts op het eenmalige pad, maar honderd dispatches naar een residentiële pool met de daemon, begrensd door het aantal workers in plaats van een onbeperkte uitbarsting van subprocessen:
$results = await(
['translate::run', 'nl', $text],
['translate::run', 'de', $text],
['translate::run', 'fr', $text],
)4.2: Planning zonder cron
De daemon kan doelen op een interval uitvoeren, wat de per-app cron-invoer achter de taken resource vervangt. Elke planningsinvoer is {app, target, every, build}: het absolute app.php pad, het doel, het interval in seconden, en of het eenmalig moet worden uitgevoerd. Elke wordt geactiveerd op zijn interval met de eerste uitvoering één interval na opstarten, net als een cron-tik:
[
{ app: '/srv/api/www/app.php', target: 'tasks::run', every: 60, build: false },
{ app: '/srv/dashboard/www/app.php', target: 'fleet::poll', every: 120, build: true },
]
Alles stroomafwaarts blijft ongewijzigd: dezelfde %app->tasks matching, dezelfde due-check, dezelfde on-disk staat. Cron blijft de fallback voor hosts zonder een daemon; je kiest één trigger, niet beide.