Client.Transport অপরিবর্তিত ৰাখি Go HTTP প্ৰক্সী ৰুট সলনি কৰক
সক্ৰিয় http.Client ক্ষেত্ৰ সলনি নকৰাকৈ নতুন সংৰূপিত প্ৰক্সী ট্ৰান্সপ’ৰ্ট প্ৰকাশ কৰিবলৈ ছিংক্ৰনাইজড RoundTripper মেৰপাক ব্যৱহাৰ কৰক।
যদি http.Client ইতিমধ্যে সমান্তৰাল অনুৰোধসমূহে ভাগ কৰি আছে, তেন্তে তাৰ Transport ক্ষেত্ৰ স্থিৰ ৰাখক। এটা মেৰপাকে ছিংক্ৰনাইজ কৰিব পাৰে প্ৰতিটো পৰৱৰ্তী ৰাউণ্ড ট্ৰিপে কোন সম্পূৰ্ণ সংৰূপিত ট্ৰান্সপ’ৰ্ট পায়:
type routeSlot struct {
mu sync.RWMutex
current http.RoundTripper
}
func (s *routeSlot) RoundTrip(r *http.Request) (*http.Response, error) {
s.mu.RLock()
current := s.current
s.mu.RUnlock()
return current.RoundTrip(r)
}
func (s *routeSlot) Set(next http.RoundTripper) {
s.mu.Lock()
s.current = next
s.mu.Unlock()
}net/http আৰু sync ব্যৱহাৰ কৰি ক্লায়েণ্ট প্ৰকাশ কৰাৰ আগতে ইয়াক আৰম্ভ কৰক:
slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}
slot.Set(nextTransport)initialTransport আৰু nextTransport অ-শূন্য (non-nil), সম্পূৰ্ণ সংৰূপিত আৰু সমান্তৰাল-সুৰক্ষিত ৰাউণ্ড ট্ৰিপাৰ হ’ব লাগিব। প্ৰতিটো প্ৰক্সী ট্ৰান্সপ’ৰ্ট প্ৰকাশ কৰাৰ আগতে নিৰ্মাণ কৰক, আৰু অনুৰোধে ইয়াক ব্যৱহাৰ কৰি থকাৰ সময়ত ইয়াৰ সংৰূপণ অপৰিবৰ্তিত ৰাখক।
লকে কেৱল পইণ্টাৰ স্নেপশ্বট সুৰক্ষা কৰে, গতিকে লেহেমীয়া অনুৰোধে ইয়াৰ সম্পূৰ্ণ নেটৱৰ্ক বিনিময়ৰ সময়ত ৰাউটিং লক নধৰে। আগৰ স্নেপশ্বট ব্যৱহাৰ কৰা অনুৰোধে সেই ট্ৰান্সপ’ৰ্টতে আগবাঢ়ে; সলনিয়ে ইয়াক পুনৰ চলায় নহয় বা ইয়াৰ সংযোগ নস্থানান্তৰ কৰে।
এপ্লিকেশ্যনৰ সীমিত জীৱনচক্ৰৰ জৰিয়তে পুৰণি ট্ৰান্সপ’ৰ্ট ৰাখক আৰু অৱসৰ দিয়ক, চলি থকা কাম শেষ হ’বলৈ দিয়ক আৰু প্ৰয়োজন অনুসৰি নিষ্ক্ৰিয় পুল বন্ধ কৰক। এটা ৰিডাইৰেক্টে সলনিৰ পিছত আন এটা RoundTrip কৰিব পাৰে। যদি গোটেই ৱৰ্কফ্ল’ৰ এটা ৰুট প্ৰয়োজন, তেন্তে এই শ্বেয়াৰ কৰা ছিলেক্টৰ মাজতে সলনি কৰাৰ পৰিৱৰ্তে ৱৰ্কফ্ল’ৰ সীমাত সেই ৰুট নিৰ্ধাৰণ কৰক।