当前位置: 首页 > 面试题库 >

非阻塞对PHP的Ajax请求

龙骏
2023-03-14
问题内容

我正在使用PHP从远程服务器下载一个(大)文件,并且此下载是通过单击网页上的下载按钮触发的。

因此,当我单击download网页上的按钮时,就会向PHP函数发出Ajax请求(带有angulars
$http)。该函数使用触发下载cURL

同时,我想使用Ajax向我的PHP网站提出其他请求。但是Pending,只要下载正在进行,所有其他Ajax请求都会显示状态。

因此,基本上,下载阻止了对PHP的所有其他请求。有什么办法可以避免这种阻塞?


问题答案:

这很可能是由于会话文件被锁定。这是许多基于php的Web应用程序上非常常见的疏忽。本质上,当您调用session_start()访问$_SESSION阵列时,它将以读/写模式打开tmp目录中的会话文件并锁定该文件以避免潜在的并发问题。如果您从其他ajax请求(或任何HTTP请求,例如从新的浏览器窗口)调用另一个脚本,则如果第二个请求也调用session_start,它将等待会话文件被解锁后再前进。

解决方法是在知道不再要写入会话文件时释放会话文件。由于用例是大量文件下载,因此在数据输出期间不太可能需要将任何内容推入$_SESSION阵列。您可以通过调用从写模式释放它session_write_close()

我不知道这是事实,直到我发现经常使用的流行网络应用程序对此感到内gui。关于此常见瓶颈的出色博客文章是:

http://konrness.com/php5/how-to-prevent-blocking-php-
requests/



 类似资料:
  • 问题内容: 我正在创建一个网站,该网站依赖于对PHP页面的AJAX调用。有没有办法防止访问原始数据?(即通过他们自己的帖子请求访问php文件)。 我想最好的方法(如果可能的话)是防止PHP将数据发送到不来自AJAX的任何内容(因为必须来自同一域)。有什么建议? 问题答案: if (strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttpre

  • 问题内容: 我在芹菜中使用Python进行大量的(〜10 / sec)API调用(包括GET,POST,PUT,DELETE)。每个请求大约需要5-10秒才能完成。 我尝试在池中运行芹菜工人,并发数为1000。 由于正在阻塞进程,每个并发连接都在等待一个请求。 如何使异步? 问题答案: 使用eventlet Monkey patching使所有纯python库都无阻塞。 补丁单库 import e

  • 本文向大家介绍请你说一下阻塞,非阻塞,同步,异步相关面试题,主要包含被问及请你说一下阻塞,非阻塞,同步,异步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。 同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看

  • 非阻塞 IO 仅对在 Servlet 和 Filter(2.3.3.3节定义的,“异步处理”)中的异步请求处理和升级处理(2.3.3.5节定义的,“升级处理”)有效。否则,当调用 ServletInputStream.setReadListener 或ServletOutputStream.setWriteListener 方法时将抛出IllegalStateException。为了支持在 Ser

  • Web 容器中的非阻塞请求处理有助于提高对改善 Web 容器可扩展性不断增加的需求,增加 Web 容器可同时处理请求的连接数量。servlet 容器的非阻塞 IO 允许开发人员在数据可用时读取数据或在数据可写时写数据。非阻塞 IO 仅对在 Servlet 和 Filter(2.3.3.3节定义的,“异步处理”)中的异步请求处理和升级处理(2.3.3.5节定义的,“升级处理”)有效。否则,当调用 S

  • 问题内容: 我在获取ncurses的getch()阻止时遇到了一些问题。默认操作似乎是非阻塞的(或者我错过了一些初始化)?我希望它可以像Windows中的getch()一样工作。我尝试了各种版本的 (并非同时全部)。如果可能的话,我宁愿不(明确地)使用any 。一个围绕残培环路(),检查特定的返回值是OK了。 问题答案: curses库是一揽子交易。如果不正确初始化库,您不能仅仅提出一个例程并希望