Miksi Guzzle-kehysvirta voi silti puskuroitua
Kehyksen rajapinta, kuljetuksen toimitus ja oma jäsentäjäsi voivat puskuroida toisistaan riippumatta. Käytä streamia eksplisiittisesti ja pidä kulutus inkrementaalisena.
getBody() palauttaa virran rajapinnan, vaikka Guzzle olisi jo ladannut vastauksen. Voit pyytää inkrementaalista verkkotoimitusta eteenpäin välityspalvelimen kautta asettamalla stream pyyntöön:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
Tämä käyttää olemassa olevaa asiakasta; julkiseen HTTP-päätepisteeseen valitse osoite HTTP-välityspalvelinluettelosta ja korvaa esimerkin välityspalvelimen URL. Suoratoiston tuki riippuu sen käsittelijästä; pelkkä virran rajapinta ei voi kertoa, toimittiko käsittelijä kehyksen inkrementaalisesti.
Kun vastaus saapuu, jatka rajoitettujen osien lukemista. $body merkkijonoksi muuntaminen kokoaa jälleen koko kehyksen. Rivijäsentäjä voi myös näyttää jumittuneen odottaessaan uutta riviä, vaikka verkon tavut olisivat saapuneet. Nämä ovat kulutuksen viiveitä, joten välityspalvelimen vaihtaminen ei poista niitä.
read_timeout rajoittaa yksittäisiä lukujen odotuksia tuetussa virran toteutuksessa. Se ei anna loputtomalle syötteelle kymmenen sekunnin kokonaiselinaikaa. Käsittele aikakatkaisu, EOF ja virheet erikseen ja sulje kehys, kun käsittely päättyy tai peruutetaan.