4: 套接字监控

因为每个连接都经过你的 hooks,你可以使用普通的 Phlo 模型查看和管理 sockets,无需特殊工具。

4.1: 存在

通过在 wsConnect 中写入一行并在 wsClose 中删除它来跟踪谁已连接:

function wsConnect($wsHost, $wsToken, $wsSocket){
	type_presence::create(socket: $wsSocket, token: substr((string)$wsToken, 0, 8), since: time())
	return true
}
function wsClose($wsHost, $wsToken, $wsSocket){
	type_presence::delete('socket=?', $wsSocket)
}

实时计数就是 count(type_presence::records()),你可以在每次更改时将其广播给所有人。

4.2: 一个连接/断开连接的馈送

将每个生命周期事件附加到日志模型中,您将拥有审计跟踪和实时数据流。演示的 /monitor 页面呈现日志,并通过 wsCast 在套接字进出时更新在线计数和数据流。

想要 用途
在线计数 count(type_presence::records())
每用户套接字 按令牌过滤存在
事件历史 一个 wslog 模型,最新的在前
定向推送 wsCast(wsTarget: $socketOrToken, ...)

4.3: 健康

在守护进程上执行 GET /health(例如 127.0.0.1:3001)会在一个地方报告连接侧和工作池,因为它们是一个进程:

{
	"status": "ok",
	"workers": 5,
	"cap": 7,
	"pools": {
		"/var/www/app/release/www/app.php": { "workers": 4, "busy": 2, "queued": 0 }
	},
	"sockets": {
		"app.example.com": { "tokens": 5, "sockets": 12 }
	},
	"registered": ["app.example.com", "dev.example.com"]
}

sockets 计算每个主机的活跃连接数(tokenssockets);pools 是每个应用的工作者统计,其中 busy 是当前处理事件的工作者数量,queued 是等待空闲工作者的事件数量;workers/cap 是活跃总数与上限的对比。池会自动增长到上限,并收割闲置的工作者,因此如果 busy 处于上限而 queued 不断增加,意味着节点已达到容量。

4.4: 限制

Phlo Realtime 是守护进程内置的 WebSocket 层:一个进程拥有套接字并运行 PHP。在一次性模式下(build: true 应用),守护进程为每个事件启动一个处理程序,因此与保持状态在内存中的进程相比,每个事件的开销较小;将主机作为发布版本运行,守护进程从其常驻池中提供服务,消除了该开销并提高了吞吐量。无论哪种方式,您都保持与 Phlo 其余部分相同的无状态模型,并且没有额外的语言。对于非常高频的流媒体(每个套接字每秒多个事件),专用的流媒体服务器可能仍然更合适。

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