使用异步长轮询?

时间:2011-05-11 13:36:26

标签: php zend-framework asynchronous nonblocking

我有一个使用长轮询的基于Zend的应用程序。基本上它会发出一个HTTP POST请求,它会阻止应用程序,直到它在20秒后返回或超时。

我需要发出第二个请求(当前是非并行的),不幸的是,如果第一个请求挂起,它会在第二个请求执行之前结束20秒(=超时)。

使我的应用程序异步的最佳方法是什么,或者至少做非阻塞的HTTP请求I / O?

2 个答案:

答案 0 :(得分:2)

如果您的两个请求都使用了session(session_start()调用)并且您没有在长轮询脚本中关闭会话,那么在长轮询运行的所有时间内,对于使用相同会话的其他脚本,会话将被锁定。因此,这些脚本必须等待(我认为它们挂在session_start()上,但不确定)是否关闭会话,默认情况下这是在脚本结束时自动完成的。

因此,如果您在长轮询中不需要会话,请不要在您的情况下运行20秒的代码(即在长轮询中进行主迭代之前)之前启动它或关闭它(调用session_write_close())。 / p>

希望这有帮助。

答案 1 :(得分:1)

嗯,也许您应该在问题中添加更多信息。 如果2个请求不相关(即第二个请求不需要第一个请求完成),您可以执行多个查询而无需等待第一个请求完成。但是,如果没有一些Javascript,你当然不能这样做。

例如,你可以在异步模式下使用jQuery ajax函数(默认情况下它是异步的)。你可以在jQuery中链接几个ajax调用,第二个不会等待第一个完成(但要注意ajax超时设置)。