2017-06-03 38 views
1

我已经使用EventSource方法获取我网站上活动用户的在线状态。 在此以下JavaScript代码被插入在每一个页面使用EventSource获取用户的在线状态是否可靠?

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. 由于只要用户在网站上连接是开放的,它是否会造成漏洞?

回答

1

上证所不适合这一目的 - 或者至少不是为此设计的。 SSE是来自服务器浏览器的持续事件流

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

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

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

  • 旧的技术,让更广泛的浏览器支持
  • 在计时器的时间间隔明确的控制,这样可以控制延迟和服务器负载之间的平衡。
1

您的解决方案非常繁重且不必要,更好的解决方案是颠倒这个想法并让服务器将用户状态信息推送给客户端。

您可以通过使用库(如socket.io)实现套接字来实现此目的。实现起来相当简单,而且是一个更具可扩展性的解决方案。

基本上,加载页面时,客户端和服务器之间会建立连接,当服务器想与客户端进行通信时,他可以简单地发出一个事件,例如user-status

您的客户可以简单地收听此事件并相应地更新他们的观点。

+0

你能告诉如何实现socket.io吗?我曾浏览过它,但无法弄清楚 – Observer

相关问题