2017-07-28 120 views
0

我有以下代码:PHP请求挂起

$client = new GuzzleHttp\Client(
    array(
     'base_uri' => 'https://somesite.com' 
    ) 
); 

$response = $client->request('POST', '/api', [ 
     'form_params' => array(
     'action' => 'getusers', 
     'api_key' => $_POST['key'], 
     'id'  => $_POST['id'] 
    ) 
]); 

当多个用户访问与上述下面的代码相同的页面,其他用户等待加载之前完成第一或最近请求其请求。

我没有使用任何session

我有标签curl,因为guzzle是建立在它上面的。也许这跟它有关系?

针对此问题的任何解决方法?

使用xhr不会修复它,因为我要求的API网站不接受其他来源。

+0

不要以为一个请求应该导致其他请求挂起,除非(a)你已经吃掉了所有的服务器资源,或者(b)你正在处理某种过程限制。我相信这将由nginx或apache或php-fpm控制。你在用哪个?如果Apache,也许看[MaxClients](https://stackoverflow.com/a/1430890/65387)设置。 – mpen

+0

嗨,即时通讯与php-fpm使用nginx。不,我不认为我的服务器耗尽资源,因为没有人使用它,除了我和我的其他电脑。我找不到任何'MaxClient'设置,但我找到的关闭是'worker_connections',我已经将'worker_connections'设置为'1024'。 –

+0

我回复我早期发布的内容不正确,我认为它工作,但一分钟后它开始阻止其他请求。 –

回答

1

如果您使用的是PHP FPM,请检查可用的PHP进程。它有一个状态页面(设置为described there)以获取此信息。

如果所有员工都很忙,那么客户的请求就会等待。您需要增加工作人员的数量,以便能够一次处理更多请求。

+0

我已将工人设置为1024,并将工作线程设置为12. –

+0

我的意思是['process.max'](http://php.net/manual/en/install.fpm.configuration.php#process-max)in PHP-FPM配置('/ etc/php/7.0/fpm/pools/www.conf'或其他,取决于你的系统)。 –