问题:使用guzzle并发请求同一个域名的时候tcp无法复用(lsof查看打开了多个tcp),如何才能复用呢
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Promise;
$client = new Client(['base_uri' => 'http://xxx']);
$promises = [
'test' => $client->getAsync('/test'),
'test1' => $client->getAsync('/test1'),
'test2' => $client->getAsync('/test2'),
];
$results = Promise\unwrap($promises);
var_dump($results);
不能手动分配,Guzzle 代码里写死了。
不过它也不是每个请求都会建立个新的 TCP Socket,它自己内部维护了一个连接池,复用问题对你来说是黑盒的。
你可以尝试一下手动指定
CURLOPT_FORBID_REUSE
、CURLOPT_FRESH_CONNECT
这几个参数为false
,默认来说就是false
的,不应该出现不复用的问题。(跟这个问题里的反过来:https://github.com/guzzle/guz... 他是不想要 TCP 复用)P.S.
Connection: keep-alive
这玩意儿就是个协定,说白了前后端都遵守了才行。