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 draait tasks::run elke minuut op elke app in zijn hostmap, wat de per-app cron-invoer achter de tasks resource vervangt. Er is niets te configureren: de per-taak planning bevindt zich in %app->tasks (de every: op elke taak), en een app die de tasks resource niet laadt, wordt automatisch overgeslagen na zijn eerste tick:
{
'dashboard.example.nl': { app: '/var/www/dashboard/www/app.php', build: true },
'api.example.nl': { app: '/var/www/api/www/app.php', build: false },
}
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.