Go-da paylaşılan dairəvi proxy seçicisi
Go proxy seçicisini sorğular arasında canlı saxlayın, paylaşılan seçim vəziyyətini qoruyun və marşrut seçməyi onun çıxışını müşahidə etməkdən ayırın.
Seçici mükəmməl şəkildə növbələşə və yenə də birinci proxy-ni seçə bilər. Səhv, hər sorğu üçün təsadüfən yeni seçici yaratmaqdır; bu, ikinci seçim etməzdən əvvəl sayğacını sıfırlayır.
Seçicini bir dəfə qurun və transport ilə birlikdə saxlayın. HTTP proxy siyahısı, sorğular açıq vasitəçilərə icazə verdikdə URL çoxluğu üçün açıq HTTP namizədləri təqdim edə bilər. Artıq yoxlanılmış, boş olmayan proxy URL siyahısı ilə başlayın:
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
}
}
Əhatə edən tətbiq boş siyahını rədd etməli, URL-ləri yoxlamalı və normal net/http, net/url və sync idxalından istifadə etməlidir. Bu seçici ondan istifadə etdiyi müddətdə siyahı dəyişməz qalmalı, ya da ayrıca sinxronlaşdırılmış dizayn vasitəsilə əvəz edilməlidir.
Qaytarılan funksiyanı bir saxlanılan http.Transport-ə bağlayın. Mutex, seçim ardıcıllığını eyni vaxtda baş verən geri çağırışlar arasında qoruyur. Yavaş şəbəkə sorğusu tamamlanarkən kilid saxlaması tələb etmir.
Marşrutu yalnız çap etmək üçün istifadə etməyin
Diaqnostik mesaj üçün seçicini yenidən çağırmaq sayğacı yenidən irəli aparır. Bu çıxış, araşdırdığınız sorğunun istifadə etdiyi namizəd yerinə növbəti namizədi təsvir edə bilər. Seçimi real geri çağırışın içində təhlükəsiz son nöqtə identifikatoru ilə qeyd edin.
Geri çağırışın işə düşməsi sorğunun uğurla çatdırıldığının sübutu deyil. Yönləndirmələr və ya əlavə transport cəhdləri “bir tətbiq çağırışı, bir seçim” kimi sadə fərziyyəni mürəkkəbləşdirə bilər. Əgər iş axını bir neçə əməliyyat boyunca bir marşrut saxlamalıdırsa, qlobal fırlanan geri çağırışdan istifadə etmək əvəzinə həmin marşrutu iş axınının sərhədində seçin.
Dairəvi növbə də fərqli açıq çıxışlar vəd etmir. O, son nöqtələri planlaşdırır. Yekun kimlik hər son nöqtənin təqdim etdiyi yolun xassəsi olaraq qalır.