2: De vier hooks
Phlo Realtime roept een van de vier functies in je app aan voor elk socket levenscyclus evenement. Je implementeert alleen de functies die je nodig hebt.
2.1: De levenscyclus
| Haak | Wordt aangeroepen wanneer | Opmerkingen |
|---|---|---|
wsAuth |
bij de handshake, voordat de socket wordt geaccepteerd | valideer de token; geef een foutmelding om te weigeren |
wsConnect |
direct nadat de socket is geaccepteerd | opzetten; uitzenden via wsCast |
wsReceive |
de client stuurt een bericht | niets; handelen via wsCast |
wsClose |
een socket sluit | niets |
2.2: De ws-geprefixeerde argumenten
Elke hook ontvangt connectiecontext onder ws-geprefixeerde namen, zodat ze nooit in conflict komen met je eigen payload-sleutels:
$wsHosten$wsPort: de host en daemonpoort waar het evenement vandaan kwam.$wsToken: de auth-token van de client.$wsSocket: de unieke id van deze socket....$data: de berichtpayload (voorwsReceive).
function wsConnect($wsHost, $wsToken, $wsSocket){
type_presence::create(socket: $wsSocket, since: time())
return true
}
function wsAuth(...$args) => true
function wsReceive($wsHost, $wsToken, $wsSocket, ...$data){
if (($data['type'] ?? null) === 'ping') wsCast(wsTarget: 'socket:'.$wsSocket, toast: 'pong')
}
function wsClose($wsHost, $wsToken, $wsSocket){
type_presence::delete('socket=?', $wsSocket)
}2.3: De status bevindt zich in de database.
Omdat handlers kortlevend zijn, moet alles wat je wilt onthouden tussen evenementen (wie online is, de laatste bericht-id) in een model worden geplaatst, net als de rest van je app. De demo houdt een presence-tabel en een wslog-tabel bij en leest deze bij elk evenement.