Go tilida umumiy aylanma proksi tanlagich
Go proksi tanlagichni so‘rovlar orasida tirik saqlang, umumiy tanlov holatini himoya qiling va marshrutni tanlashni uning chiqishini kuzatishdan ajrating.
Tanlagich mukammal aylanib, baribir birinchi proksini tanlab turishi mumkin. Xato — har bir so‘rov uchun tasodifan yangi tanlagich yaratish; bu ikkinchi tanlov qilishdan oldin uning hisoblagichini nolga qaytaradi.
Tanlagichni bir marta quring va uni transport bilan birga saqlang. HTTP proksilar ro‘yxati so‘rovlar ommaviy vositachilarga ruxsat berganda URL to‘plami uchun ommaviy HTTP nomzodlarini taqdim etishi mumkin. Allaqachon tekshirilgan, bo‘sh bo‘lmagan proksi URL ro‘yxatidan boshlang:
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
}
}
Atrofidagi dastur bo‘sh ro‘yxatni rad etishi, URL manzillarni tekshirishi va oddiy net/http, net/url hamda sync importlaridan foydalanishi kerak. Ushbu tanlagich undan foydalanar ekan, ro‘yxat o‘zgarmas bo‘lib qolishi yoki alohida sinxronlangan dizayn orqali almashtirilishi kerak.
Qaytarilgan funksiyani bitta saqlanadigan http.Transport ga ulang. Mutex tanlov tartibini bir vaqtdagi qayta chaqiruvlar orasida himoya qiladi. Sekin tarmoq so‘rovi tugayotganda qulf ushlab turishni talab qilmaydi.
Marshrutni faqat chop etish uchun sarflamang
Diagnostika xabari uchun tanlagichni qayta chaqirish hisoblagichni yana oldinga suradi. Bu chiqish siz tekshirayotgan so‘rov ishlatgan nomzod o‘rniga keyingi nomzodni tasvirlashi mumkin. Tanlovni haqiqiy qayta chaqiruv ichida xavfsiz oxirgi nuqta identifikatori bilan yozib oling.
Qayta chaqiruvni chaqirish so‘rov muvaffaqiyatli yetkazilganining isboti emas. Qayta yo‘naltirishlar yoki qo‘shimcha transport urinishlari «bitta dastur chaqiruvi, bitta tanlov» degan oddiy taxminni murakkablashtirishi mumkin. Agar ish oqimi bir nechta amallar davomida bitta marshrutni saqlashi kerak bo‘lsa, global aylanma qayta chaqiruvdan foydalanish o‘rniga o‘sha marshrutni ish oqimi chegarasida tanlang.
Aylanma navbat ham alohida ommaviy chiqishlarni va’da qilmaydi. U oxirgi nuqtalarni rejalashtiradi. Yakuniy o‘zlik har bir oxirgi nuqta taqdim etadigan yo‘lning xossasi bo‘lib qoladi.