በGo የተጋራ የዙሪያ-ዙሪያ ፕሮክሲ መራጭ
የGo ፕሮክሲ መራጭን በጥያቄዎች መካከል ሕያው አድርገው ያቆዩት፣ የተጋራውን የምርጫ ሁኔታ ይጠብቁ እና መንገድን መምረጥን ከመውጫው መመልከት ይለዩ።
መራጭ በትክክል ሊሽከረከርና አሁንም የመጀመሪያውን ፕሮክሲ ሊመርጥ ይችላል። ስህተቱ ለእያንዳንዱ ጥያቄ አዲስ መራጭ በአጋጣሚ መፍጠር ነው፤ ይህም ሁለተኛ ምርጫ ከመደረጉ በፊት ቆጣሪውን ዳግም ያስጀምራል።
መራጩን አንድ ጊዜ ይፍጠሩና ከትራንስፖርቱ ጋር ያቆዩት። የHTTP ፕሮክሲ ዝርዝር ጥያቄዎቹ ይፋዊ መካከለኛዎችን ሲፈቅዱ ለURL ስብስቡ ይፋዊ የHTTP እጩዎችን ሊያቀርብ ይችላል። አስቀድሞ በተረጋገጠ፣ ባዶ ባልሆነ የፕሮክሲ 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 ላይ ያያዙት። ሙቴክሱ የምርጫ ቅደም ተከተሉን በተመሳሳይ ጊዜ በሚሰሩ የመመለሻ ጥሪዎች መካከል ይጠብቃል። ቀርፋፋ የኔትወርክ ጥያቄ እስኪጠናቀቅ ቁልፍ መያዙን አይጠይቅም።
መንገድን ለማተም ብቻ አትጠቀሙበት
ለምርመራ መልእክት መራጩን እንደገና መጥራት ቆጣሪውን እንደገና ያራምዳል። ያ ውጤት ከምትመረምረው ጥያቄ የተጠቀመውን እጩ ሳይሆን ቀጣዩን እጩ ሊገልጽ ይችላል። ምርጫውን በእውነተኛው የመመለሻ ጥሪ ውስጥ በደህንነቱ የተጠበቀ የመጨረሻ ነጥብ መለያ ይመዝግቡ።
የመመለሻ ጥሪ መደረጉ ጥያቄ በተሳካ ሁኔታ መድረሱን ማረጋገጫ አይደለም። አቅጣጫ መቀየር ወይም ተጨማሪ የትራንስፖርት ሙከራዎች “አንድ የመተግበሪያ ጥሪ፣ አንድ ምርጫ” የሚለውን ቀላል ግምት ያወሳስቡታል። የሥራ ፍሰት በበርካታ ሥራዎች ውስጥ አንድ መንገድ መያዝ ካለበት፣ ዓለም አቀፍ የሚሽከረከር የመመለሻ ጥሪ ከመጠቀም ይልቅ ያንን መንገድ በሥራ ፍሰቱ ወሰን ላይ ይምረጡ።
ዙሪያ-ዙሪያ የተለያዩ ይፋዊ መውጫዎችንም አያረጋግጥም። እሱ የመጨረሻ ነጥቦችን ያቀናጃል። የመጨረሻው ማንነት እያንዳንዱ የመጨረሻ ነጥብ ከሚያቀርበው መንገድ ባህሪ ሆኖ ይቆያል።