Guzzle body stream သည် အဘယ်ကြောင့် buffer ဖြစ်နေနိုင်သနည်း
Body interface၊ transport ပို့ဆောင်မှုနှင့် သင့်ကိုယ်ပိုင် parser တို့သည် သီးခြားစီ buffer လုပ်နိုင်သည်။ stream ကို ရှင်းရှင်းလင်းလင်း အသုံးပြုပြီး သုံးစွဲမှုကို အဆင့်ဆင့် ထားရှိပါ။
getBody() သည် Guzzle က response ကို ဒေါင်းလုဒ်လုပ်ပြီးဖြစ်နေသော်လည်း stream interface ကို ပြန်ပေးသည်။ forward proxy မှတစ်ဆင့် အဆင့်ဆင့် network ပို့ဆောင်မှုကို တောင်းဆိုရန် request တွင် stream ကို သတ်မှတ်ပါ:
$response = $client->request('GET', 'https://example.com/stream', [
'proxy' => 'http://proxy.example:8080',
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
၎င်းသည် ရှိပြီးသား client ကို အသုံးပြုသည်။ အများသုံး HTTP endpoint အတွက် HTTP proxy စာရင်းမှ လိပ်စာတစ်ခုကို ရွေးပြီး နမူနာ proxy URL ကို အစားထိုးပါ။ Streaming ပံ့ပိုးမှုသည် ၎င်း၏ handler ပေါ်တွင် မူတည်သည်။ stream interface တစ်ခုတည်းဖြင့် handler က body ကို အဆင့်ဆင့် ပို့ခဲ့ခြင်း ရှိ/မရှိ မပြောနိုင်ပါ။
Response ရောက်လာပြီးနောက် ကန့်သတ်ထားသော အပိုင်းများကို ဆက်ဖတ်ပါ။ $body ကို string အဖြစ် ပြောင်းလဲခြင်းသည် body တစ်ခုလုံးကို ထပ်မံစုစည်းသည်။ Network bytes ရောက်လာပြီဖြစ်သော်လည်း မျဉ်းအသစ်ကို စောင့်နေစဉ် line parser သည် ပိတ်မိနေပုံရနိုင်သည်။ ဤအရာများသည် သုံးစွဲမှုနှောင့်နှေးမှုများဖြစ်သောကြောင့် proxy ပြောင်းလဲခြင်းက ၎င်းတို့ကို ဖယ်ရှားမည်မဟုတ်ပါ။
read_timeout သည် ပံ့ပိုးထားသော stream အကောင်အထည်ဖော်မှုအောက်တွင် တစ်ဦးချင်း ဖတ်ရှုမှု စောင့်ဆိုင်းချိန်များကို ကန့်သတ်သည်။ ၎င်းသည် အဆုံးမရှိသော feed အတွက် စုစုပေါင်း ဆယ်စက္ကန့် သက်တမ်းကို မပေးပါ။ Timeout၊ EOF နှင့် အမှားများကို သီးခြားကိုင်တွယ်ပြီး လုပ်ဆောင်မှု ပြီးဆုံးခြင်း သို့မဟုတ် ပယ်ဖျက်ခံရခြင်းတွင် body ကို ပိတ်ပါ။