កម្មវិធីជ្រើសរើសប្រូកស៊ីវិលជុំរួមក្នុង 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 មួយដែលរក្សាទុក។ Mutex ការពារលំដាប់ជ្រើសរើសរវាងការហៅត្រឡប់ព្រមគ្នា។ វាមិនតម្រូវឱ្យកាន់សោខណៈសំណើបណ្តាញយឺតកំពុងបញ្ចប់ទេ។
កុំប្រើផ្លូវតែដើម្បីបោះពុម្ពវា
ការហៅកម្មវិធីជ្រើសរើសម្តងទៀតសម្រាប់សារវិនិច្ឆ័យធ្វើឱ្យការរាប់ឈានមុខម្តងទៀត។ លទ្ធផលនោះអាចពិពណ៌នាបេក្ខជនបន្ទាប់ជំនួសឱ្យបេក្ខជនដែលសំណើដែលអ្នកកំពុងស៊ើបអង្កេតបានប្រើ។ កត់ត្រាជម្រើសនៅខាងក្នុងការហៅត្រឡប់ពិតប្រាកដជាមួយអត្តសញ្ញាណចំណុចបញ្ចប់ដែលមានសុវត្ថិភាព។
ការហៅត្រឡប់មិនមែនជាភស្តុតាងថាសំណើត្រូវបានបញ្ជូនដោយជោគជ័យទេ។ ការបង្វែរផ្លូវ ឬការប៉ុនប៉ងដឹកជញ្ជូនបន្ថែមអាចធ្វើឱ្យការសន្មតសាមញ្ញ «ការហៅកម្មវិធីមួយ ជម្រើសមួយ» កាន់តែស្មុគស្មាញ។ ប្រសិនបើលំហូរការងារត្រូវរក្សាផ្លូវមួយឆ្លងកាត់ប្រតិបត្តិការជាច្រើន សូមជ្រើសផ្លូវនោះនៅព្រំដែនលំហូរការងារ ជំនួសឱ្យការប្រើការហៅត្រឡប់វិលជុំសកល។
ការវិលជុំក៏មិនសន្យាច្រកចេញសាធារណៈខុសៗគ្នាដែរ។ វាកំណត់កាលវិភាគចំណុចបញ្ចប់។ អត្តសញ្ញាណចុងក្រោយនៅតែជាគុណលក្ខណៈនៃផ្លូវដែលចំណុចបញ្ចប់នីមួយៗផ្តល់ឱ្យ។