Дозволете Go контекст да го откаже воспоставувањето на SOCKS врска
Користете го извезениот интерфејс ContextDialer за Go SOCKS патека и разликувајте откажување на врската од роковите на подоцнежниот сообраќај на апликацијата.
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 што повикувачот не може да ја управува.
Контекстот го управува воспоставувањето на врската. Откако ќе се врати net.Conn, примени соодветни рокови за читање/пишување или рокови за барање на повисоко ниво. Временското ограничување на врската на основниот dialer и вкупниот буџет на апликацијата се различни граници.
За интеграција со HTTP транспорт, задржете го нормалното TLS и HTTP однесување. Вратениот SOCKS тек свесен за контекстот е предавањето на транспортот, а не одговор ниту политика за животен век за сите подоцнежни бајти.