用EventSource获取User的在线状态靠谱吗?
Is it reliable to use EventSource to get User's online status?
我使用了 EventSource 方法来获取我网站上活跃用户的在线状态。
在下面的JavaScript代码中,每个页面都插入了
var source = new EventSource("set_online.php");
因此此代码正在连续执行 set_online.php
文件。
在服务器端,即在 set_online.php
中执行以下代码
$query = "UPDATE my_db SET last_active = '{$current_time}' WHERE id = {$_SESSION["id"]}";
$result = mysqli_query($connection, $query);
现在我对此有两个担忧:
- 由于数据库实时更新last_active,会不会影响服务器负载?
- 只要用户在网站上,连接就会打开,是否会产生漏洞?
SSE 不适合此目的 - 或者至少不是为此目的而设计的。 SSE 是源源不断的事件 从 服务器 到 浏览器。
不过,您的脚本会起作用。 PHP 脚本会做一件事(更新数据库)然后退出。当它退出时,连接关闭。浏览器会看到连接已经断开,几秒钟后会重新连接。当循环重复时。
关于你的两个问题:
1. 它不是真正连续的,更多的是每 3 秒重新连接一次。服务器负载可能很大。
2、连接没有持续打开;但如果是的话,它不会产生任何新的漏洞。
我会在 JavaScript 间隔内使用 ajax 调用,而不是 SSE。这些优势:
- 较旧的技术,因此支持更广泛的浏览器
- 明确控制计时器间隔,因此您可以控制延迟和服务器负载之间的平衡。
你的解决方案很繁重,没有必要,更好的方案是反过来,让服务器推送用户状态信息给你的客户端。
您可以通过使用 socket.io 等库实现套接字来实现此目的。它实现起来非常简单,并且是一个更具可扩展性的解决方案。
基本上,当页面加载时,将在您的客户端和服务器之间建立连接,当服务器想要与客户端通信时,他可以简单地发出一个事件,例如 user-status
。
您的客户只需收听此事件并相应地更新他们的观点。
我使用了 EventSource 方法来获取我网站上活跃用户的在线状态。 在下面的JavaScript代码中,每个页面都插入了
var source = new EventSource("set_online.php");
因此此代码正在连续执行 set_online.php
文件。
在服务器端,即在 set_online.php
中执行以下代码
$query = "UPDATE my_db SET last_active = '{$current_time}' WHERE id = {$_SESSION["id"]}";
$result = mysqli_query($connection, $query);
现在我对此有两个担忧:
- 由于数据库实时更新last_active,会不会影响服务器负载?
- 只要用户在网站上,连接就会打开,是否会产生漏洞?
SSE 不适合此目的 - 或者至少不是为此目的而设计的。 SSE 是源源不断的事件 从 服务器 到 浏览器。
不过,您的脚本会起作用。 PHP 脚本会做一件事(更新数据库)然后退出。当它退出时,连接关闭。浏览器会看到连接已经断开,几秒钟后会重新连接。当循环重复时。
关于你的两个问题: 1. 它不是真正连续的,更多的是每 3 秒重新连接一次。服务器负载可能很大。 2、连接没有持续打开;但如果是的话,它不会产生任何新的漏洞。
我会在 JavaScript 间隔内使用 ajax 调用,而不是 SSE。这些优势:
- 较旧的技术,因此支持更广泛的浏览器
- 明确控制计时器间隔,因此您可以控制延迟和服务器负载之间的平衡。
你的解决方案很繁重,没有必要,更好的方案是反过来,让服务器推送用户状态信息给你的客户端。
您可以通过使用 socket.io 等库实现套接字来实现此目的。它实现起来非常简单,并且是一个更具可扩展性的解决方案。
基本上,当页面加载时,将在您的客户端和服务器之间建立连接,当服务器想要与客户端通信时,他可以简单地发出一个事件,例如 user-status
。
您的客户只需收听此事件并相应地更新他们的观点。