我有一个flex应用程序,需要多个和长的http请求才能从服务器获取数据。在运行时,随机的http请求只会挂起。浏览器网络面板显示http请求待处理,直到正好五分钟。在此期间,从同一浏览器会话向该主机名发出的任何请求都不会加载(挂起)。
我尝试修改保持活动请求标头,但服务器响应似乎重置为默认值,这只是5秒。
我在Timeout Directive下的apache conf中找到了300s的值。将Timeout从300更改为30时,浏览器主机挂断更改为30秒。为什么即使在新选项卡中取消httpRequest后浏览器也在等待Timeout消息?
我正在使用ustream.close()
关闭actionscript urlstream。使用ustream = new URLStream()
重新初始化urlstream。在不关闭的情况下进行初始化时,先前的请求将完成,从而导致较慢的负载和较高的带我担心actionscript close()无法对http请求给出正确的闭包,但它只发生了几次。
答案 0 :(得分:1)
罪魁祸首是php会话锁。服务器调用的php文件用于从会话中获取一些数据。 PHP使用会话锁来确保会话数据的一致性。因此,一次只有一个文件可以保持与服务器的开放连接。当urlstream从浏览器端关闭时,apache会接受下一个请求,但会等到上一个请求完成或超时。解决方案是确保在关闭流之前关闭php文件中的所有会话。
为了进一步降低服务器开销,我现在从GET参数传递密钥而不是维护会话。 session_write_close可用于阻止会话锁定。
我使用mod_status
和ExtendedStatus On
在this blog