5: De WebSocket-laag
Phlo Realtime is de ingebouwde WebSocket-server van de daemon: de daemon bezit de sockets en draait je PHP-hooks in hetzelfde proces. Dit is hoe dat samenkomt, en een goed model voor hoe de functies van de daemon zich verhouden.
5.1: In-process, geen aparte service
De WebSocket-server (de ws bibliotheek) bevindt zich binnen de daemon. Het beheert de verbindingen, het clientregister en de /message broadcastbrug, en draait geen eigen PHP: voor elk socket-evenement dispatcht het de bijbehorende websocket::<hook> target op de eigen pool van de daemon, in-process. Dus de keuze tussen eenmalig en resident is gewoon de buildmodus van de host (wat de daemon al doet voor die host), niet een aparte WebSocket-instelling; het dispatchpad is in beide gevallen identiek.
Het koppelt elke verbinding's Host aan een app via het register van de daemon, de host-naar-app kaart die is gedeclareerd in config/daemon.js (de 4e argument van de daemon). Een host zonder invoer faalt de dispatch, wat de upgrade faalt.
5.2: De gebeurtenisstroom
| Socket evenement | Verzonden als | Opmerkingen |
|---|---|---|
| handshake | websocket::auth |
Wordt uitgevoerd voordat de socket wordt geaccepteerd; een expliciete false (of een gegooide fout) weigert het. Een ontbrekende token cookie weigert het outright. |
| accepted | websocket::connect |
Opzetten; een false hier sluit de socket. |
| message | websocket::receive |
Verzonden met stream: true, zodat geprinte regels terugvloeien naar de afzender terwijl ze worden geproduceerd. |
| disconnect | websocket::close |
Opruimen. |
De websocket resource van de engine koppelt deze doelen aan jouw gewone wsAuth / wsConnect / wsReceive / wsClose functies; een ontbrekende functie betekent "accepteren en niets doen". Dit is het volledige verhaal aan de app-kant dat wordt behandeld in de WebSocket handleiding en het WebSocket hoofdstuk van de gids.
5.3: Andere relaties
- De runtime helpers worden verzonden via de
app-route over HTTP wanneer dedaemonconstante is ingesteld (zie het vorige hoofdstuk). - De scheduler is ingebouwd in de daemon (vorig hoofdstuk) en vervangt cron voor
tasks::runenfleet::poll. - Phlo WhatsApp blijft zijn eigen service. Een WhatsApp-gateway houdt een persistente telefoonsessie vast, wat geen taak is voor de worker-pool, dus de daemon voert het niet uit; het wordt gemonitord, niet opgenomen.
5.4: Het uitvoeren ervan
De daemon is één proces. Voer het uit onder een supervisor:
pm2 start config.js --name phlo-daemon
pm2 save
Het bindt aan localhost; beëindig wss:// bij je reverse proxy en stuur /websocket door naar de poort van de daemon.