我有一个正在运行的网站。该网站在localhost上运行良好,没有出现此类错误,但是当我将其放到网上后,每当两个或三个用户同时使用同一页面时,它就会开始显示507个存储页面不足。
例如,有一个网页chat.php,它运行ajax请求以每700毫秒更新一次聊天。并排的两个ajax请求继续检查消息和通知。这些ajax请求是使用javascript的setInterval
方法完成的。当两个或多个用户同时访问此页面时,该页面不会加载并显示错误,有时该页面显示429个请求过多错误。因此,在同一时间,在用户端最多可以有4个请求,如果脚本同时运行,那么也可以。由于进入过程有限,会发生这种情况吗?默认情况下,托管为我提供了10个受限进入流程。如果您希望我发布setInterval
方法代码,即使我认为问题还出在这里,请回复并发表评论。
答案 0 :(得分:3)
例如,有一个网页chat.php,它运行ajax请求以每700毫秒更新一次聊天。
这些ajax请求是使用javascript的setInterval方法完成的。
当两个或多个用户同时访问此页面时,该页面不会加载并显示错误,有时该页面显示429个请求过多错误。
因此,在同一时间,在用户端最多可以发出4个请求,并且如果脚本同时运行也可以。
默认情况下,托管服务为我提供了10个受限进入流程。
请花一些时间阅读(自己的)报价。
您说您每700毫秒对A服务器进行一次AJAX处理,您可以使用setInterval来完成。每个用户最多有4个请求,总共10个。如果有2个或更多的访问者,那么东西就会变成干草。
我认为这里可能有多种原因引起问题:
由于多个用户,您达到了10个请求限制。
当2个用户命中4个请求时,您在8处的请求数,如果在服务器上进行了其他任何请求,您很快就会达到10个最大值。3个用户在4个请求中的请求数是12个,根据您的问题达到了限制。 / p>
您可能正在使用DOS自己的服务器。
使用setInterval
进行AJAX请求是坏。 真的很糟糕。问题是,如果您每700毫秒请求一次服务器,而服务器需要的响应时间超过700毫秒,您就会堆积请求。您最终将只用一个用户就达到了极限。 (尽管在某些情况下,浏览器可能可以保护您)。
如何修复
我认为10个连接(如果实际上是10个连接,对我来说尚不清楚)非常低。但是,您应该重构代码以避免使用setInterval
。在安排新请求之前,应使用Promise
之类的方法来跟踪请求何时结束,以防止堆积一堆请求。根据经验,除非有充分的理由,否则请勿使用setInterval
。最好总是使用一些更智能的调度。
您还可能希望提高这些请求的效率,是否可以合并呼叫以检查消息和通知?