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 တစ်ခုတွင် ချိတ်ဆက်ပါ။ Mutex သည် တစ်ပြိုင်နက်ခေါ်ဆိုမှုများကြားတွင် ရွေးချယ်မှုအစီအစဉ်ကို ကာကွယ်သည်။ နှေးကွေးသော ကွန်ရက်တောင်းဆိုမှု ပြီးဆုံးနေစဉ် သော့ခတ်ထားရန် မလိုအပ်ပါ။
ရိုက်နှိပ်ရန်အတွက်သာ လမ်းကြောင်းကို မသုံးပါနှင့်
ရောဂါစစ်ဆေးရေး မက်ဆေ့ချ်အတွက် ရွေးချယ်စနစ်ကို ထပ်ခေါ်ခြင်းသည် ကောင်တာကို ထပ်မံတိုးစေသည်။ ထိုရလဒ်သည် သင်စုံစမ်းနေသော တောင်းဆိုမှု အသုံးပြုခဲ့သော ကိုယ်စားလှယ်လောင်းအစား နောက်ထပ် ကိုယ်စားလှယ်လောင်းကို ဖော်ပြနိုင်သည်။ အမှန်တကယ် ခေါ်ဆိုမှုအတွင်း လုံခြုံသော အဆုံးမှတ် သတ်မှတ်ကွက်ဖြင့် ရွေးချယ်မှုကို မှတ်တမ်းတင်ပါ။
ခေါ်ဆိုမှုတစ်ခု ခေါ်ခြင်းသည် တောင်းဆိုမှု အောင်မြင်စွာ ပို့ဆောင်ပြီးကြောင်း သက်သေမဟုတ်ပါ။ ပြန်လွှဲမှုများ သို့မဟုတ် ထပ်ဆောင်း သယ်ယူပို့ဆောင်ရေး ကြိုးပမ်းမှုများသည် “အပလီကေးရှင်း ခေါ်ဆိုမှု တစ်ကြိမ်၊ ရွေးချယ်မှု တစ်ကြိမ်” ဆိုသော ရိုးရှင်းသည့် ယူဆချက်ကို ရှုပ်ထွေးစေနိုင်သည်။ အလုပ်စဉ်တစ်ခုသည် လုပ်ဆောင်မှုများစွာတစ်လျှောက် လမ်းကြောင်းတစ်ခုကို ထိန်းသိမ်းရမည်ဆိုလျှင် ကမ္ဘာလုံးဆိုင်ရာ လှည့်ပတ်ခေါ်ဆိုမှုကို အသုံးပြုမည့်အစား ထိုလမ်းကြောင်းကို အလုပ်စဉ်၏ နယ်နိမိတ်တွင် ရွေးချယ်ပါ။
လှည့်ပတ်ခြင်းသည် မတူညီသော အများသူငှာ ထွက်ပေါက်များကိုလည်း ကတိမပေးပါ။ ၎င်းသည် အဆုံးမှတ်များကို အချိန်ဇယားဆွဲသည်။ နောက်ဆုံး ဝိသေသလက္ခဏာသည် အဆုံးမှတ်တစ်ခုစီ ပေးသော လမ်းကြောင်း၏ ဂုဏ်သတ္တိအဖြစ် ဆက်လက်တည်ရှိသည်။