我使用了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);
现在我对此有两个担忧:
答案 0 :(得分:1)
SSE不适用于此目的 - 或者至少不适合它。 SSE是从服务器到浏览器的事件的持续流。
但是你的脚本会起作用。 PHP脚本将做一件事(更新数据库)然后退出。当它退出时,连接关闭。浏览器将看到连接已经死亡,几秒钟后将重新连接。当循环重复时。
关于你的两个问题: 1.它不是真正连续的,更是每3秒重新连接一次。服务器负载可能很重要。 2.连接未连续打开;但如果它不会造成任何新的漏洞。
我会在JavaScript间隔上使用ajax调用,而不是SSE。这些优点:
答案 1 :(得分:1)
您的解决方案繁重且不必要,更好的解决方案是扭转这一想法,让服务器将用户状态信息推送给您的客户。
您可以通过使用socket.io等库实现套接字来实现此目的。它实现起来非常简单,是一种更具可扩展性的解决方案。
基本上,当加载页面时,将在客户端和服务器之间建立连接,并且当服务器想要与客户端通信时,他可以简单地发出诸如user-status
之类的事件。
您的客户可以直接听取此事件并相应地更新其观点。