Tarpinių serverių sąrašo tikrinimas su ribotu lygiagretumu
Apribokite lygiagrečius tarpinių serverių tikrinimus ir užrašykite, ką kiekvienas tikrinimas iš tikrųjų nustatė tikslinei svetainei.
var options = new ParallelOptions
{
MaxDegreeOfParallelism = 8,
CancellationToken = cancellationToken
};
await Parallel.ForEachAsync(endpoints, options,
async (endpoint, token) =>
{
var result = await ProbeAsync(endpoint, target, token);
observations.Add(result);
});Naudokite ribotą darbuotojų telkinį, o ne paleiskite po atskirą užduotį kiekvienam galiniam taškui. Tikrinant leidžiamus viešus tikslus, nemokamas tarpinių serverių sąrašas pateikia kandidatų eilutes; kurdami zondą išsaugokite kiekvieno įrašo protokolą. Šis .NET planavimo fragmentas numato tarpinį serverį suprantantį ProbeAsync ir gijoms saugų observations rinkiklį. Aštuoni yra iliustratyvi riba, o ne išmatuotas optimumas. Zondas vis dar reikalauja bandymo limitų ir visos užduoties atšaukimo.
Saugokite kiekvieną užbaigtą rezultatą kartu su jo įvestimi, net kai užbaigimo tvarka skiriasi. Užrašykite protokolą, galinį tašką, tikslą, metodą, praėjusį laiką ir baigtį. Ryšio sutrikimas, tarpinio serverio prisijungimo atmetimas, atmestas CONNECT ir iš svetainės gautas atsakymas yra skirtingi stebėjimai.
Atidarytas TCP prievadas neįrodo derybų su tarpiniu serveriu. Tarpinio serverio adreso gavimas kaip svetainės taip pat skiriasi nuo jo naudojimo tikslo užklausai.
Tikslą ir metodą rinkitės pagal reikiamą galimybę. HEAD gali sutaupyti turinio srauto, bet neįrodo, kad GET grąžina naudingą turinį; svetainė gali atmesti vieną ir leisti kitą. HTTPS prideda CONNECT ir paskirties TLS, kurių nėra paprastame HTTP. Išėjimo adresas yra dar vienas stebėjimas paskirties pusėje, atskirtas nuo sukonfigūruoto įėjimo.
Ribotas darbas neleidžia tikrintojui išsemti savo lizdų, atminties ar planuoklio prieš įvertinant maršrutą. Pakopinis rezultatas išlieka naudingas atrankos politikai neapsimetant, kad viena sėkminga paskirtis daro galinį tašką visuotinai gerą.