Избирачот може совршено да се врти и сепак постојано да го избира првото прокси. Грешката е случајното создавање нов избирач за секое барање, што го ресетира неговиот бројач пред да има втор избор.

Создајте го избирачот еднаш и задржете го со транспортот. Списокот на HTTP прокси може да обезбеди јавни HTTP кандидати за множеството URL кога барањата дозволуваат јавни посредници. Започнете со веќе валидиран, непразен список на URL на прокси:

func rotatingProxy(urls []*url.URL) func(*http.Request) (*url.URL, error) {
    var mu sync.Mutex
    next := 0
    return func(*http.Request) (*url.URL, error) {
        mu.Lock()
        selected := urls[next]
        next = (next + 1) % len(urls)
        mu.Unlock()
        return selected, nil
    }
}

Околината апликација мора да одбие празен список, да ги валидира URL и да ги користи нормалните net/http, net/url и sync импорти. Списокот треба да остане непроменлив додека овој избирач го користи, или да се замени преку одделно синхронизиран дизајн.

Прикачете ја вратената функција на еден задржан http.Transport. Mutex-от ја штити секвенцата на избор меѓу истовремени повратни повици. Не бара држење на заклучување додека се завршува бавно мрежно барање.

Не трошете маршрута само за да ја испечатите

Повторното повикување на избирачот за дијагностичка порака повторно го поместува бројачот. Тој излез може да го опише следниот кандидат наместо кандидатот што го користело барањето што го истражувате. Забележете го изборот внатре во вистинскиот повратен повик со безбеден идентификатор на крајната точка.

Повикувањето на повратен повик не е доказ дека барањето е успешно доставено. Пренасочувањата или дополнителните транспортни обиди можат да ја комплицираат едноставната претпоставка „едно повикување на апликацијата, еден избор“. Ако работниот тек мора да задржи една маршрута низ неколку операции, изберете ја таа маршрута на границата на работниот тек наместо да користите глобално ротирачки повратен повик.

Кружното менување исто така не ветува различни јавни излези. Тоа закажува крајни точки. Конечниот идентитет останува својство на патеката што ја обезбедува секоја крајна точка.

Поврзани статии