2: 四个钩子

Phlo Realtime 为您的应用程序中的每个 socket 生命周期事件调用四个函数中的一个。您只需实现所需的函数。

2.1: 生命周期

钩子 被调用时 备注
wsAuth 在握手时,接受套接字之前 验证令牌;引发错误以拒绝
wsConnect 在套接字被接受后立即 设置;通过 wsCast 广播
wsReceive 客户端发送消息时 无;通过 wsCast 进行操作
wsClose 套接字关闭时

2.2: 以ws为前缀的参数

每个钩子在以ws为前缀的名称下接收连接上下文,因此它们不会与您自己的有效负载键冲突:

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 表,并在每个事件中读取它们。

我们使用必要的cookie来使该网站正常工作。在您的许可下,我们还使用分析工具来改善网站。