Javascript 网页有时显示507存储不足

Javascript 网页有时显示507存储不足,javascript,php,html,web,web-hosting,Javascript,Php,Html,Web,Web Hosting,我有一个网站正在运行。该网站在localhost上运行良好,没有此类错误,但在我将其上线后,每当有两三个用户同时使用同一页面时,它就会显示507个存储不足页面。 例如,有一个网页chat.php,它运行一个ajax请求,每700毫秒更新一次聊天记录。两个ajax请求并排检查消息和通知。这些ajax请求是使用javascript的setInterval方法完成的。当两个或多个用户同时访问此页面时,该页面不会加载并显示错误,有时该页面会显示429太多请求错误。因此,在同一时间,最多可以在用户端发生4

我有一个网站正在运行。该网站在localhost上运行良好,没有此类错误,但在我将其上线后,每当有两三个用户同时使用同一页面时,它就会显示507个存储不足页面。
例如,有一个网页chat.php,它运行一个ajax请求,每700毫秒更新一次聊天记录。两个ajax请求并排检查消息和通知。这些ajax请求是使用javascript的
setInterval
方法完成的。当两个或多个用户同时访问此页面时,该页面不会加载并显示错误,有时该页面会显示429太多请求错误。因此,在同一时间,最多可以在用户端发生4个请求,如果脚本同时运行,也会发生4个请求。这是否会因为有限的进入流程而发生?默认情况下,主机为我提供10个有限的进入进程。如果您想让我发布
setInterval
方法代码,请回复并留下评论,即使我认为问题出在这里

例如,有一个网页chat.php,它运行一个ajax请求,每700毫秒更新一次聊天记录

这些ajax请求是使用javascript的setInterval方法完成的

当两个或多个用户同时访问此页面时,该页面不会加载并显示错误,有时该页面会显示429太多请求错误

因此,在同一时间,最多可以在用户端发生4个请求,如果脚本同时运行,也会发生4个请求

默认情况下,主机为我提供10个有限的进入进程

请花些时间通读(你自己的)引文

您声明每700ms对te服务器进行一次AJAX操作,并使用setInterval进行此操作。每个用户最多有4个请求,总共有10个。如果有两个或两个以上的访问者,事情就会失控

我认为这里可能有多个问题:

由于有多个用户,您达到了10个请求的限制。

当2个用户在8点发出4个请求时,如果服务器上有其他任何东西发出一个请求,那么很快就会达到10个请求的最大值。3个用户,4个请求,12个,根据你的问题,达到了你的极限

您可能正在使用自己的服务器。

使用
setInterval
执行AJAX请求是不好的。真糟糕。问题是,如果您每700ms请求一次服务器,而服务器需要超过700ms的响应时间,那么您将累积请求。只要一个用户,您最终将达到任何限制。(尽管在某些情况下,浏览器可能会保护您)

如何修复

我认为10个连接(如果它实际上是10个连接,我不清楚)是非常低的。但是,您应该重构代码以避免使用
setInterval
。在安排新的请求之前,应该使用类似于
Promise
的方法来跟踪请求何时结束,以防止请求堆积。根据经验,除非有很好的理由,否则永远不要使用
setInterval
。使用更智能的调度几乎总是更好的


您可能还希望更高效地处理这些请求,是否可以合并调用以检查消息和通知?

听起来您运行ajax的频率太高,服务器过载。要么降低频率,要么使用WebSocket重新设计。我从某个地方了解到,在一个网站上每秒可以轻松运行4或5个ajax请求,对吗?这就是单个浏览器可以处理发送的数量……但这与服务器必须能够处理和响应它们的容量无关。错误表明问题出在服务器端,而不是网页(客户端)。同时使用它的用户越多(从而发出更多的ajax请求),在您重新设计代码以停止使用自己的服务器之前,情况将变得越糟。这意味着它与进入过程有关,对吗?我以前从未听说过这个术语,您对“进入过程”有定义吗?你的意思是同时进行HTTP请求吗?是的,我明白你的意思,但是用户在同一时间输入相同的脚本的情况很少,因为脚本只运行几毫秒,所以根据我的说法,添加请求实际上似乎不太可能!是的,主机提供了默认的10个进入进程!至于更换
setInterval
,我一定会尽快更换它@VipulSharma“很少有用户同时输入相同的脚本,因为脚本只运行几毫秒”……如果服务器难以提供响应,则请求将开始花费更长的时间,用户可以开始同时运行更多的请求。这样,问题的症状会使问题变得更糟。正如斯文所说,通过设计代码,使其在前一个ajax请求完成之前不会发出新的ajax请求,您可以消除这种可能性。@VipulSharma但是,如果您的服务器将您的并发HTTP请求限制为10个,那么在服务器达到限制之前,您仍然只需要少数用户发出请求和/或加载页面。这听起来像是一个很小的限制,所以也许这是一种故意限制您正在使用的测试服务器,仅用于开发人员测试小事情?在这种情况下,您不应该使用它来运行网站的完整版本。使用合适的工具进行工作,并获得一个合适的托管环境,它符合您预期的使用模式。实际上,托管以基本价格提供10个并发请求,无论如何,我似乎得到了我错的地方!谢谢你的朋友!