คำขอ Guzzle อาจหมดเวลาในขณะรอช่องเชื่อมต่อ
ตั้งงบประมาณการเชื่อมต่อที่ใช้งานอยู่ของ cURL multi บน handler ที่ใช้ร่วมกัน และแยกออกจากความจุของแคชที่ไม่ได้ใช้งาน
หากคำขอแบบอะซิงโครนัสหมดเวลาก่อนเปิดการเชื่อมต่อ ให้ตรวจสอบขีดจำกัดที่ใช้งานอยู่ของตัวขนส่งรวมถึงเวลาหมดเวลาของเครือข่าย libcurl จะจัดคิวการถ่ายโอนเมื่อขีดจำกัดเหล่านั้นเต็ม และงบเวลาหมดเวลายังคงเดินต่อขณะอยู่ในคิว
สำหรับ cURL multi handler ที่ใช้ร่วมกันของ Guzzle 7:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlMultiHandler;
$multi = new CurlMultiHandler([
'options' => [
CURLMOPT_MAX_TOTAL_CONNECTIONS => 24,
CURLMOPT_MAX_HOST_CONNECTIONS => 4,
],
]);
$client = new Client([
'handler' => HandlerStack::create($multi),
]);ใช้ไคลเอนต์นี้สำหรับงานอะซิงโครนัสและระบุตัวเลือกพร็อกซีที่ต้องการในการดำเนินการ ค่าเหล่านี้เป็นงบประมาณตัวอย่าง สำหรับคำขอสาธารณะที่ได้รับอนุญาตผ่านตัวกลางสาธารณะ รายการพร็อกซี HTTP มีผู้สมัครสำหรับ URL พร็อกซีของการดำเนินการ
| ตัวเลือก | งบประมาณ |
|---|---|
| MAX_TOTAL_CONNECTIONS | การเชื่อมต่อที่เปิดพร้อมกันภายใต้ multi handler |
| MAX_HOST_CONNECTIONS | การเชื่อมต่อไปยังโฮสต์/พอร์ตเดียว การเชื่อมต่อพร็อกซีจะนับกับปลายทางพร็อกซี |
| MAXCONNECTS | การเชื่อมต่อที่เก็บไว้ในแคชหลังการใช้งาน |
เว็บไซต์หลายแห่งที่ใช้พร็อกซีเดียวกันไม่ได้รับโควตาการเชื่อมต่อพร็อกซีแยกกันโดยอัตโนมัติ ความจุของแคชที่ไม่ได้ใช้งานไม่ได้เปิดการเชื่อมต่อล่วงหน้าและไม่ได้ทำให้สลับกันได้: การใช้ซ้ำขึ้นอยู่กับเส้นทาง ปลายทาง โปรโตคอล และการรับรองความถูกต้อง
รักษางบงานของแอปพลิเคชันและโควตาของผู้ให้บริการให้สอดคล้องกับงบการขนส่งเหล่านี้ ระบบนับการเชื่อมต่อ ไม่ใช่คำขอต่อวินาที การเพิ่มเวลาหมดเวลาของซ็อกเก็ตไม่สามารถระบุได้ว่าคิวหรือการรอเครือข่ายใช้เวลาไป