1

我正在开发一个涉及对第三方Web服务的调用的PHP Web应用程序。最近我遇到了问题,因为一些Web服务速度缓慢和/或超时。 (当发生这种情况时,服务在5-6分钟后抛出错误,这是由Web应用程序处理的)缓慢的服务器脚本会导致IE挂起

但是,问题出现在等待结果/超时时,所有其他连接浏览器(IE中的其他窗口/标签)失速。这似乎是浏览器的问题,因为如果在另一个浏览器(例如Chrome)中打开辅助窗口,Web应用程序将毫不拖延地提供页面。我已经考虑异步设置Web服务调用(一个单独的server.side进程,或在浏览器中的ajax调用),但同时我想知道为什么IE浏览器将所有连接在等待一个页面时,Web应用程序处于等待状态?难道自定义头文件或其他琐碎的标记技巧会告诉IE继续与同一主机上的其他页面建立连接吗?

回答

1

问题出现的同时等待结果/超时,在浏览器中

所有其它连接到Web应用程序你看到的是正常的和预期的行为,如果你使用会话。当会话所有者发出请求时,默认的基于文件的会话处理程序会在会话文件上放置一个锁。一旦请求完成,锁定被释放。同时,如果用户提出任何进一步的请求,这些请求将等待锁定被释放,然后才能继续。此行为可防止可能会导致会话数据丢失的争用情况。

如果您不使用会话,或者您已经编写了自己的会话处理程序,并且它没有锁定(大多数不需要,您必须自己编写该行为),那么是的,IE是怪异的,而我没有进一步的建议。

我已经考虑设置Web服务调用异步

如果Web服务是不可靠的,这是一个好主意。你应该考虑Gearman,一个工作/消息队列系统。它有comprehensive PHP support作为PECL extension

+0

即使对于不使用会话的人,他们也必须验证php.ini中的session.auto_start设置为0,因为他们可能在不知道它的情况下使用会话。 – 2010-07-30 11:38:22

+0

非常感谢您的信息!我确实使用会话,并且从未发生过锁定发生在服务器上的情况,因为1)所有其他操作执行得非常快2)大多数操作都是单页 – goorj 2010-08-04 11:11:17