Дэскрыптары PHP cURL і паўторнае выкарыстанне злучэнняў праз проксі
Адрознівайце захаванне кэша злучэнняў libcurl ад гарантыі, што TCP-злучэнне праз проксі застанецца жывым.
Захаванне дэскрыптара cURL можа дазволіць наступным перадачам паўторна выкарыстоўваць сумяшчальныя кэшаваныя злучэнні. Але яно не можа прымусіць проксі трымаць TCP-злучэнне адкрытым бясконца.
Бок, з якім ідзе абмен, можа закрыць прастойнае злучэнне, сеткавы шлях можа знікнуць, а наступная перадача можа патрабаваць іншага маршруту або тунэля. Паўторнае выкарыстанне — гэта кліенцкая аптымізацыя, якая залежыць ад гэтых умоў, а не гарантыя даступнасці.
Для паўторанай працы праз адну палітыку проксі трымайце адпаведны дэскрыптар або кэш злучэнняў multi-handle жывым і пазбягайце опцый, якія наўмысна запытваюць новыя злучэнні або забараняюць паўторнае выкарыстанне, калі толькі задача гэтага не патрабуе. Правярайце фактычныя паводзіны перадачы, перш чым меркаваць, што больш кароткі другі запыт даказвае паўторнае выкарыстанне.
Сцеражыцеся старых прыкладаў PHP, дзе сказана, што злучэнне застаецца адкрытым "да curl_close". PHP дакументуе, што curl_close() не мае эфекту з PHP 8.0 і састарэў з PHP 8.5. Права ўласнасці на рэсурсы і час жыцця аб'ектаў трэба разумець у той версіі PHP, якую вы разгортваеце.
Таймер, які шле паўтораныя запыты, каб трымаць проксі цёплым, дадае трафік і ўсё ж не можа перашкодзіць аддаленаму канцу закрыцца. Аддавайце перавагу звычайнаму кіраванню злучэннямі, абмежаваным запытам і ясным правілам паўторных спроб, а не абяцанню, што адно злучэнне праз проксі заўсёды выжыве.