gpt4 book ai didi

php - 如何解决用户打开无数标签页导致服务器泛滥的问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:22 25 4
gpt4 key购买 nike

我有某种聊天/论坛应用程序,它使用 jquery ajax 使用定期轮询(每 15 秒)检查新消息。我想知道我是否可以通过加载多个相同的浏览器实例来解决用户试图变得“有趣”的问题,这些浏览器实例有很多选项卡,所有选项卡都指向同一个应用程序。每个选项卡都发送一个 ajax 请求,如果多个用户开始做同样的事情,这可能会导致服务器溢出。

我将 session 连同上次访问时间和 IP 地址存储在一个表中,只要用户不使用相同的浏览器,它就可以正常工作。我可以存储使用 ajax POST 或 GET 请求发送的唯一标识符,但如果常规(非滥用)用户刷新他的页面,这会产生问题,然后创建一个新的标识符。

这还不是一个真正的问题,但最好在有人想像这样滥用系统之前捕获它 :) 知道如何做到这一点吗?

最佳答案

一种选择是像这样获取数据:

  • 您的脚本正在准备轮询数据。在执行请求之前,写入(使用 LocalStorage )一个值,表示您将要获取数据。 localStorage.setItem("last-request-timestamp", new Date().getTime());
  • 轮询数据。你得到一个结果。将该结果写入本地存储:localStorage.setItem("latest-messages", ajax_result);
  • 通过检查 localStorage.getItem("last-request-timestamp") 是否超过 15 秒来检查页面是否准备轮询数据。如果是,转到步骤 1。如果不是,请等待 15 秒,然后再次检查。
  • 无论当前页面是否轮询数据,检查 latest-messages 变量并更新页面。

其他页面当然会共享localStorage数据。如果此时正在获取另一个页面,他们将不会获取数据。如果页面 #1 关闭,其他页面之一将继续获取数据。

我以前没有使用过 LocalStorage,但浏览器支持似乎还不错。您还应该能够将它用作键值数组:localStorage["last-request-timestamp"]

localStorage中只能存储字符串,当然也可以序列化为JSON。

关于php - 如何解决用户打开无数标签页导致服务器泛滥的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com