2: 四个钩子
Phlo Realtime 为您的应用程序中的每个 socket 生命周期事件调用四个函数中的一个。您只需实现所需的函数。
2.1: 生命周期
| 钩子 | 被调用时 | 备注 |
|---|---|---|
wsAuth |
在握手时,接受套接字之前 | 验证令牌;引发错误以拒绝 |
wsConnect |
在套接字被接受后立即 | 设置;通过 wsCast 广播 |
wsReceive |
客户端发送消息时 | 无;通过 wsCast 进行操作 |
wsClose |
套接字关闭时 | 无 |
2.2: 以ws为前缀的参数
每个钩子在以ws为前缀的名称下接收连接上下文,因此它们不会与您自己的有效负载键冲突:
$wsHost和$wsPort:事件来源的主机和守护进程端口。$wsToken:客户端的认证令牌。$wsSocket:此套接字的唯一 ID。...$data:消息有效负载(用于wsReceive)。
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: 状态存储在数据库中
因为处理程序是短暂的,您希望在事件之间记住的任何信息(谁在线,最后一条消息的 ID)都应该放在模型中,和您应用的其他部分一样。演示保持一个 presence 表和一个 wslog 表,并在每个事件中读取它们。