საერთო წრიული პროქსი სელექტორი Go-ში
შეინარჩუნეთ Go პროქსი სელექტორი ცოცხალი მოთხოვნებს შორის, დაიცავით საერთო არჩევანის მდგომარეობა და განასხვავეთ მარშრუტის არჩევა მისი გასასვლელის დაკვირვებისგან.
სელექტორს შეუძლია სრულყოფილად მოტრიალდეს და მაინც პირველი პროქსი აირჩიოს. შეცდომა ის არის, რომ ყოველი მოთხოვნისთვის შემთხვევით იქმნება ახალი სელექტორი, რაც ახდენს მისი მთვლელის განულებას სანამ მეორე არჩევანს გააკეთებს.
ააგეთ სელექტორი ერთხელ და შეინახეთ ის ტრანსპორტთან ერთად. 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-ს. მუტექსი იცავს არჩევის თანმიმდევრობას ერთდროულ გამომძახებლებს შორის. ის არ მოითხოვს ბლოკირების შენარჩუნებას ნელი ქსელური მოთხოვნის დასრულებისას.
ნუ დახარჯავთ მარშრუტს მხოლოდ მის დასაბეჭდად
სელექტორის კიდევ ერთხელ გამოძახება დიაგნოსტიკური შეტყობინებისთვის კვლავ წევს მთვლელს წინ. ამ გამოსავალმა შეიძლება აღწეროს შემდეგი კანდიდატი, და არა ის კანდიდატი, რომელიც თქვენ მიერ გამოკვლეულმა მოთხოვნამ გამოიყენა. დააფიქსირეთ არჩევანი ნამდვილი გამომძახებლის შიგნით უსაფრთხო საბოლოო წერტილის იდენტიფიკატორით.
გამომძახებლის გამოძახება არ არის მტკიცებულება, რომ მოთხოვნა წარმატებით მიწოდდა. გადამისამართებებმა ან დამატებითმა ტრანსპორტის ცდებმა შეიძლება გაართულოს მარტივი ვარაუდი „ერთი აპლიკაციის გამოძახება, ერთი არჩევანი“. თუ სამუშაო პროცესმა რამდენიმე ოპერაციის განმავლობაში უნდა შეინარჩუნოს ერთი მარშრუტი, აირჩიეთ ის მარშრუტი სამუშაო პროცესის საზღვარზე გლობალური მბრუნავი გამომძახებლის გამოყენების ნაცვლად.
წრიული რიგი ასევე არ გვპირდება განსხვავებულ საჯარო გასასვლელებს. ის გეგმავს საბოლოო წერტილებს. საბოლოო იდენტობა რჩება იმ გზის თვისებად, რომელსაც ყოველი საბოლოო წერტილი გვაწვდის.