אַ געמיינזאַמער רונד־רובין פּראָקסי־אויסקלייַבער אין Go
האַלט אַ Go פּראָקסי־אויסקלייַבער לעבעדיק צווישן בקשות, באַשיץ דעם געמיינזאַמען אויסקלייַב־צושטאַנד און פֿאַרבייַטן דעם אויסקלייַב פֿון אַ וועג מיטן באַאַבאַכטן זייַן אַרויסגאַנג.
אַן אויסקלייַבער קען זיך דרייען פּערפֿעקט און נאָכאַמאָל שטענדיק אויסקלייַבן דעם ערשטן פּראָקסי. דער טעות איז אַז מע שאַפֿט פֿאַר יעדער בקשה אַ נייַעם אויסקלייַבער, וואָס שטעלט צוריק זייַן ציילער איידער ער האָט אַ צווייטער ברירה.
בויט דעם אויסקלייַבער איין מאָל און האַלט אים מיט דער טראַנספּאָרט. די HTTP־פּראָקסי־ליסטע קען צושטעלן עפֿנטלעכע HTTP־קאַנדידאַטן פֿאַר דער URL־מענגע ווען די בקשות ערלויבן עפֿנטלעכע מיטלערס. אָנהייבט מיט אַ שוין באַשטעטיקטער, נישט־ליידיקער ליסטע פֿון פּראָקסי־URLs:
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
}
}
די אַרומיקע אַפּליקאַציע מוז אָפּוואַרפֿן אַ ליידיקע ליסטע, באַשטעטיקן די URLs און ניצן די נאָרמאַלע אימפּאָרטן net/http, net/url און sync. די ליסטע זאָל בלײַבן אומפֿאַרענדערט בשעת דער אויסקלייַבער ניצט זי, אָדער ווערן פֿאַרבייַט מיט אַ באַזונדער סינכראָניזירטער פֿאָרמgebung.
באַהעפֿט די צוריקגעגעבענע פֿונקציע צו איין אָפּגעהיטענעם http.Transport. דער מוטעקס באַשיצט די אויסקלייַב־סעקווענץ צווישן גלײַכצײַטיקע צוריקרופֿן. ער פֿאָדערט נישט אַ שלאָס צו האַלטן בשעת אַ פּאַמעלעכער נעץ־בקשה פֿאַרענדיקט זיך.
פֿאַרניץ נישט אַ וועג בלויז כּדי אים צו דרוקן
נאָך אַ מאָל רופֿן דעם אויסקלייַבער פֿאַר אַ דיאַגנאָסטישער מעלדונג רוקט ווײַטער דעם ציילער. יענער אויסגאַנג באַשרײַבט אפֿשר דעם קומענדיקן קאַנדידאַט אַנשטאָט דעם קאַנדידאַט וואָס די בקשה וואָס איר פֿאָרשט האָט געניצט. פֿאַרשרייַבט דעם אויסקלייַב אין דעם עכטן צוריקרוף מיט אַ זיכערן ענדפּונקט־אידענטיפֿיקאַטאָר.
אַ צוריקרוף־רוף איז נישט קיין באַווײַז אַז אַ בקשה איז דערגאַנגען מיט הצלחה. איבערפֿירונגען אָדער נאָכמער טראַנספּאָרט־פּרובירן קענען פֿאַרקילן די פּשוטע אַננאַמע „איין אַפּליקאַציע־רוף, איין אויסקלייַב“. אויב אַ אַרבעטספֿלוס מוז האַלטן איין וועג דורך עטלעכע אָפּעראַציעס, קלייבט דעם וועג אויס בייַ דער גרענעץ פֿון אַרבעטספֿלוס אַנשטאָט ניצן אַ גלאָבאַלן דרייענדיקן צוריקרוף.
רונד־רובין צוזאָגט אויך נישט קיין באַזונדערע עפֿנטלעכע אַרויסגאַנגען. ער פּלאַנירט ענדפּונקטן. די סוף־אידענטיטעט בלײַבט אַן אייגנשאַפֿט פֿון דעם וועג וואָס יעדער ענדפּונקט פֿאַרזאָרגט.