我有一个使用长轮询的基于Zend的应用程序。基本上它会发出一个HTTP POST请求,它会阻止应用程序,直到它在20秒后返回或超时。
我需要发出第二个请求(当前是非并行的),不幸的是,如果第一个请求挂起,它会在第二个请求执行之前结束20秒(=超时)。
使我的应用程序异步的最佳方法是什么,或者至少做非阻塞的HTTP请求I / O?
答案 0 :(得分:2)
如果您的两个请求都使用了session(session_start()调用)并且您没有在长轮询脚本中关闭会话,那么在长轮询运行的所有时间内,对于使用相同会话的其他脚本,会话将被锁定。因此,这些脚本必须等待(我认为它们挂在session_start()上,但不确定)是否关闭会话,默认情况下这是在脚本结束时自动完成的。
因此,如果您在长轮询中不需要会话,请不要在您的情况下运行20秒的代码(即在长轮询中进行主迭代之前)之前启动它或关闭它(调用session_write_close())。 / p>
希望这有帮助。
答案 1 :(得分:1)
例如,你可以在异步模式下使用jQuery ajax函数(默认情况下它是异步的)。你可以在jQuery中链接几个ajax调用,第二个不会等待第一个完成(但要注意ajax超时设置)。