ឲ្យ context របស់ Go បោះបង់ការរៀបចំការតភ្ជាប់ SOCKS
ប្រើចំណុចប្រទាក់ ContextDialer ដែលនាំចេញសម្រាប់ផ្លូវ SOCKS របស់ Go ហើយបែងចែកការបោះបង់ការតភ្ជាប់ពីកាលកំណត់លើចរាចរណ៍កម្មវិធីបន្ទាប់។
func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
dialer, err := proxy.SOCKS5(
"tcp",
"127.0.0.1:1080",
nil,
&net.Dialer{Timeout: 5 * time.Second},
)
if err != nil {
return nil, err
}
contextDialer, ok := dialer.(proxy.ContextDialer)
if !ok {
return nil, errors.New("SOCKS dialer lacks context support")
}
return contextDialer.DialContext(ctx, "tcp", destination)
}នៅក្នុងកញ្ចប់បណ្តាញ Go ដែលមានស្រាប់ សូមប្រើការនាំចូល context, errors, net, time និង x/net/proxy។ អាគុយម៉ង់ nil មិនជ្រើសរើសព័ត៌មានសម្ងាត់ SOCKS ណាមួយទេ។ សម្រាប់គោលដៅសាធារណៈនៅលើផ្លូវប្រូកស៊ីសាធារណៈដែលបានអនុញ្ញាត បញ្ជីប្រូកស៊ី SOCKS5 ផ្តល់បេក្ខជនសម្រាប់ចំណុចចុងក្រោយរបស់ dialer។
ការអះអាង proxy.ContextDialer ដែលនាំចេញធ្វើឲ្យការអនុវត្តដែលមិនគាំទ្របរាជ័យយ៉ាងច្បាស់។ ពិនិត្យមើលភាពអាស្រ័យដែលបានដាក់ពង្រាយ ជាជាងការដាក់ឈ្មោះប្រភេទ dialer ខាងក្នុង ឬចាប់ផ្តើម goroutine ដែលរារាំងដែលអ្នកហៅមិនអាចគ្រប់គ្រងបាន។
context គ្រប់គ្រងការរៀបចំការតភ្ជាប់។ នៅពេល net.Conn ត្រូវបានត្រឡប់មកវិញ សូមអនុវត្តកាលកំណត់អាន/សរសេរសមស្រប ឬកាលកំណត់សំណើកម្រិតខ្ពស់ជាង។ ពេលវេលាតភ្ជាប់របស់ dialer មូលដ្ឋាន និងថវិកាសរុបរបស់កម្មវិធី គឺជាដែនកំណត់ខុសៗគ្នា។
សម្រាប់ការរួមបញ្ចូលការដឹកជញ្ជូន HTTP សូមរក្សាឥរិយាបទ TLS និង HTTP ធម្មតារបស់វា។ ស្ទ្រីម SOCKS ដែលដឹងអំពី context ដែលត្រូវបានត្រឡប់មកវិញគឺជាការប្រគល់ទៅការដឹកជញ្ជូន មិនមែនជាការឆ្លើយតប ឬគោលនយោបាយអាយុកាលសម្រាប់បៃបន្ទាប់ទាំងអស់នោះទេ។