在不查询数据库的情况下将 SSE 与 Laravel 一起使用
Using SSE with Laravel without querying the database
我正在开发一个实时仪表板,我想在有新数据时通知客户,以便他们刷新仪表板。由于客户端不向服务器发送任何数据,我认为使用服务器发送的事件会比使用网络套接字更好。
这是后端代码:
$response->setCallback(
function() {
while(true) {
echo "retry: 100\n\n";
if($this->needRefresh() == 1) {
echo "data: 1\n\n";
$this->setRefreshFalse();
}
ob_flush();
flush();
sleep(3);
}
});
我创建了一个只有一行的 table,只要有新数据,它的值就会设置为 true。
$this->needRefresh()
函数每 3 秒访问一次数据库。
所以如果有很多客户端,这将是服务器上的负载。
我想问一下有没有其他方法可以触发SSE而不必每3秒访问一次数据库。
这种情况下,可以使用Redis。键值数据结构足以满足此要求。因为您需要避免磁盘 IO,请考虑 Redis 或 Memcache。 Redis 是一种高性能的内存数据存储,具有可配置的持久性。
我正在开发一个实时仪表板,我想在有新数据时通知客户,以便他们刷新仪表板。由于客户端不向服务器发送任何数据,我认为使用服务器发送的事件会比使用网络套接字更好。
这是后端代码:
$response->setCallback(
function() {
while(true) {
echo "retry: 100\n\n";
if($this->needRefresh() == 1) {
echo "data: 1\n\n";
$this->setRefreshFalse();
}
ob_flush();
flush();
sleep(3);
}
});
我创建了一个只有一行的 table,只要有新数据,它的值就会设置为 true。
$this->needRefresh()
函数每 3 秒访问一次数据库。
所以如果有很多客户端,这将是服务器上的负载。
我想问一下有没有其他方法可以触发SSE而不必每3秒访问一次数据库。
这种情况下,可以使用Redis。键值数据结构足以满足此要求。因为您需要避免磁盘 IO,请考虑 Redis 或 Memcache。 Redis 是一种高性能的内存数据存储,具有可配置的持久性。