我有一个在服务器上运行的长期PHP脚本。它通过服务器向
问题是,在同一时间,我想使用AJAX向服务器发送请求,但在长脚本停止之前,它并不会发生。
我进一步调查了这个问题,发现了奇怪的事情。
我的问题是为什么会发生这种情况,以及如何解决?我希望能够在同一浏览器中运行其他PHP脚本的同时向服务器发送AJAX请求。
以下是“卡住”的请求示例。第一个请求是视频,第二个请求是我想发送的AJAX请求,在第一个请求完成之前不会有任何响应。
一旦第一个请求完成,第二个请求立即完成。
Web服务器是Apache 2。在IE和Chrome中都可以重现此问题。
使用普通的jQuery $.ajax()调用发送Ajax请求。
以下是阻止AJAX请求的视频请求和响应信息。
video
标签流视频(不要问我为什么这样做 :-))。它可以运行数十分钟。问题是,在同一时间,我想使用AJAX向服务器发送请求,但在长脚本停止之前,它并不会发生。
我进一步调查了这个问题,发现了奇怪的事情。
- 当长时间运行的PHP脚本正在运行时,我无法从同一浏览器调用任何PHP脚本(无论是AJAX还是其他)。
- 同时,从其他浏览器可以轻松访问服务器。
- 非PHP资产(图像、视频)可以正常访问。
- 如果直接从.mp4文件播放视频,则不存在此问题。可以在播放视频时处理对php的AJAX请求。
我的问题是为什么会发生这种情况,以及如何解决?我希望能够在同一浏览器中运行其他PHP脚本的同时向服务器发送AJAX请求。
以下是“卡住”的请求示例。第一个请求是视频,第二个请求是我想发送的AJAX请求,在第一个请求完成之前不会有任何响应。
![enter image description here](https://istack.dev59.com/xqtuz.webp)
![enter image description here](https://istack.dev59.com/Ni2M2.webp)
使用普通的jQuery $.ajax()调用发送Ajax请求。
以下是阻止AJAX请求的视频请求和响应信息。
Request GET /portal/portlet/index/id/671/call/proxyVideo?entityId=1 HTTP/1.1
Accept */*
If-Unmodified-Since Fri, 24 Apr 2015 08:18:29 GMT
If-Match "f91b54d-514740a87ff40"
Range bytes=360448-261207372
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Referer http://mm.mac/content
GetContentFeatures.DLNA.ORG 1
Pragma getIfoFileURI.dlna.org
Accept-Language en-US
Accept-Encoding gzip, deflate
Host mm.mac
Connection Keep-Alive
Cache-Control no-cache
Cookie PHPSESSID=41821op72k2s24mfrsbn5gad64
Response HTTP/1.1 206 Partial Content
Date Tue, 01 Dec 2015 13:39:31 GMT
Server Apache/2.4.16 (Unix) PHP/5.6.13
X-Powered-By PHP/5.6.13
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Last-Modified Fri, 24 Apr 2015 08:18:29 GMT
ETag "f91b54d-514740a87ff40"
Accept-Ranges bytes
Content-Length 260846925
Access-Control-Allow-Methods GET
Content-Range bytes 360448-261207372/261207373
Keep-Alive timeout=5, max=100
Connection Keep-Alive
Content-Type video/mp4
session_write_lock()
,从而释放锁。 - DarkBeesession_write_close()
吗? - van Stein en Groentjes