我有以下代码:
Angular Code:
$http.get('admin/a').success(function(){
console.log("A finish");
});
$http.get('admin/b').success(function(){
console.log("B finish");
});
PHP代码:
Route::group(array('prefix' => 'admin'), function()
{
Route::get('a', array('before' => 'auth.backend', function(){
// SLEEP!
sleep(5);
return Response::json(array('a' => 'a'));
}));
Route::get('b', array('before' => 'auth.backend', function(){
return Response::json(array('b' => 'b'));
}));
}
我的问题是第二个http呼叫在第一个http呼叫结束后才开始,因为你看到第一个路由睡了五秒钟。
是否有人知道火灾并同时启动此请求?
谢谢!
答案 0 :(得分:2)
你拥有的JS代码是正确的。您的服务器实际上是在请求A之后立即发送了对B的请求(您可以在浏览器的开发工具的网络面板中进行验证)但是睡眠阻止服务器实际processing
B直到A完成。
这个问题讨论了睡眠替代方案的这个问题:How can I stop PHP sleep() affecting my whole PHP code?
答案 1 :(得分:2)
此行为是由于第一次调用(/ admin / a)在其休眠持续时间内持有会话锁定,因此第二次调用(/ admin / b)无法在没有会话锁定的情况下继续进行。
您可以在睡觉前通过拨打session_write_close()
解锁会话。
如果您需要在唤醒后在第一个功能中访问会话,请参阅how to reopen the session上的此答案。