使用EventSource获取用户的在线状态是否可靠?

时间:2017-06-03 09:28:00

标签: javascript php eventsource

我使用了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);

现在我对此有两个担忧:

  1. 由于数据库实时连续更新last_active,是否会影响服务器负载?
  2. 只要用户在网站上,连接就会打开,是否会产生漏洞?

2 个答案:

答案 0 :(得分:1)

SSE不适用于此目的 - 或者至少不适合它。 SSE是从服务器浏览器的事件的持续流。

但是你的脚本会起作用。 PHP脚本将做一件事(更新数据库)然后退出。当它退出时,连接关闭。浏览器将看到连接已经死亡,几秒钟后将重新连接。当循环重复时。

关于你的两个问题: 1.它不是真正连续的,更是每3秒重新连接一次。服务器负载可能很重要。 2.连接未连续打开;但如果它不会造成任何新的漏洞。

我会在JavaScript间隔上使用ajax调用,而不是SSE。这些优点:

  • 旧技术,更广泛的浏览器支持
  • 显式控制定时器间隔,因此您可以控制延迟和服务器负载之间的平衡。

答案 1 :(得分:1)

您的解决方案繁重且不必要,更好的解决方案是扭转这一想法,让服务器将用户状态信息推送给您的客户。

您可以通过使用socket.io等库实现套接字来实现此目的。它实现起来非常简单,是一种更具可扩展性的解决方案。

基本上,当加载页面时,将在客户端和服务器之间建立连接,并且当服务器想要与客户端通信时,他可以简单地发出诸如user-status之类的事件。

您的客户可以直接听取此事件并相应地更新其观点。