Javascript 超过20个连接的NodeJS队列系统

Javascript 超过20个连接的NodeJS队列系统,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在尝试在NodeJS中创建一个队列系统,以便一次只能有20个连接访问某个页面。现在,我正在使用javascript和localStorage为每个用户分配一个唯一的ID来存储他们的ID。我想给每个用户一分钟时间来查看内容片段,然后引导他们重新排队。如果他们必须等待,它会告诉他们您将在XX分钟内接通 现在我的过程是使用http.globalAgent.maxSockets=20;只允许20个人进去,但不允许我把他们安排到别的地方让他们等。我的想法是建立一个数据库,记录人们排队的顺序。然后,当一

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

现在我的过程是使用http.globalAgent.maxSockets=20;只允许20个人进去,但不允许我把他们安排到别的地方让他们等。我的想法是建立一个数据库,记录人们排队的顺序。然后,当一个用户在1分钟后被踢出页面时,该行中的下一个用户将被带进来,并在被踢出页面前1分钟被给予该用户


我正在使用MySQL存储队列。问题是,我不知道如何完成代码,在一分钟后引导某人并让他们重新排队。有什么帮助吗?谢谢

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


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

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