【问题标题】:NodeJS Queue System for Connections Past 20过去 20 的连接的 NodeJS 队列系统
【发布时间】:2016-01-04 03:37:06
【问题描述】:

我正在尝试在 NodeJS 中创建一个队列系统,以便一次只有 20 个连接能够访问某个页面。现在,我使用shortid 和javascript localStorage(以存储他们的ID)为每个用户分配一个唯一的ID。我想给每个用户 1 分钟的时间来查看该内容,然后引导他们“重新排队”。如果他们必须等待,它会告诉他们“您将在 XX 分钟内连接”。

现在我的流程是使用http.globalAgent.maxSockets = 20; 只允许 20 人进入,但不允许我将他们路由到其他地方让他们等待。我的想法是建立一个关于人们“排队”顺序的数据库。然后当一个用户在 1 分钟后被踢出页面时,下一个“排队”的用户将被引入并在他们被踢出前 1 分钟给予。

我正在使用 MySQL 来存储队列。问题是我不确定如何在一分钟后完成启动某人并让他们“重新排队”的代码。有什么帮助吗?谢谢!

【问题讨论】:

  • 目前尚不清楚您要控制什么。您是否试图控制有多少人可以同时查看一个页面?因为查看与http.globalAgent.maxSockets 无关,根本不是您的服务器可以直接控制的。查看常规网页的浏览器在查看时未连接到服务器。建立一个或多个连接来检索页面内容,然后在检索到页面内容后关闭连接。这在不同版本的 HTTP 中的工作方式略有不同。
  • 为什么要使用 localStorage?一个 cookie 就足够了,并且具有更好的浏览器兼容性。

标签: javascript mysql node.js


【解决方案1】:

我认为您误解了 HTTP 协议。当您发出 HTTP 请求时,会创建一个 TCP 连接,但不会保留该连接。您也不能只限制单个路由的套接字。 HTTP 不是持久连接。您需要找到另一种方法来实现这样的系统。由于 HTTP 是无状态且非持久的,因此很难正确执行。因此,如果您将 maxSockets 限制为 20,则意味着您一次只能接受 20 个请求。为请求/响应创建了一个套接字,但在此之后即使用户仍在查看该页面也不会持续存在。

您可能需要一种将用户“签入”到该页面的方法。想到的事情是让用户在到达该页面时连接到 Web 套接字,并且每次用户尝试加入然后向该页面上的所有用户发送广播以查看仍有多少用户在该页面上.除非您通过 websocket 提供页面内容,否则这仍然很容易被愚弄,因为我可以简单地禁用 websockets 或加载脚本以断开与 websocket 的连接,因此它不能“让我重新排队”。这可能是一个非常复杂的解决方案,因为您正在尝试管理客户端的状态,而这并不是 HTTP 本身擅长的。

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 2022-06-22
    • 1970-01-01
    • 2019-04-21
    • 2012-02-16
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多