golang tcp 설정 시간 초과

WBOY
풀어 주다: 2023-05-10 12:41:36
원래의
1346명이 탐색했습니다.

golang tcp set timeout

golang을 사용하여 tcp 네트워크 애플리케이션을 작성할 때 시간 초과가 설정되지 않으면 네트워크 연결이 오랫동안 중단되어 프로그램의 성능과 안정성에 영향을 미칠 수 있습니다. 따라서 golang tcp 네트워크 프로그래밍 과정에서 타임아웃을 합리적으로 설정하는 것도 특히 중요합니다. 이 기사에서는 프로그램의 신뢰성과 안정성을 향상시키기 위해 golang에서 tcp 시간 초과를 설정하는 방법을 소개합니다.

1. TCP 연결 시간 초과 설정

  1. DialTimeout 및 Dialer

golang에서 TCP 연결 시간 초과를 설정하는 방법에는 DialTimeout을 사용하거나 Dialer를 사용하는 두 가지 방법이 있습니다. 그중 DialTimeout은 Dialer를 단순화한 버전입니다.

DialTimeout 함수는 다음과 같이 정의됩니다.

func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
로그인 후 복사

그 중 세 번째 매개변수인 timeout은 연결 시간 초과를 지정합니다. 이 시간 내에 연결이 설정되지 않으면 오류 메시지가 반환됩니다.

Dialer는 다음과 같이 정의된 시간 제한을 더 유연하게 설정할 수 있습니다.

type Dialer struct { Timeout time.Duration KeepAlive time.Duration Resolver *Resolver DualStack bool FallbackDelay time.Duration Control func(network, address string, c syscall.RawConn) error }
로그인 후 복사

Dialer의 Timeout 속성은 DialTimeout 함수의 시간 제한 매개 변수와 유사하지만 더 유연하며 시간 제한을 동적으로 설정할 수 있습니다.

  1. 사용 예

다음은 DialTimeout 함수를 사용하여 tcp 연결 시간 초과를 설정하는 예입니다.

conn, err := net.DialTimeout("tcp", "127.0.0.1:9000", 3*time.Second) if err != nil { fmt.Println("failed to connect:", err) return } defer conn.Close()
로그인 후 복사

위 코드에서 DialTimeout 함수의 세 번째 매개변수 3*time.Second는 연결 시간 초과 기간을 지정합니다. 3초로. 이 시간 내에 연결이 설정되지 않으면 오류 메시지가 반환됩니다.

Dialer를 사용하여 tcp 연결 시간 초과를 구현하는 경우 다음을 수행할 수 있습니다.

dialer := &net.Dialer{ Timeout: 3 * time.Second, } conn, err := dialer.Dial("tcp", "127.0.0.1:9000") if err != nil { fmt.Println("failed to connect:", err) return } defer conn.Close()
로그인 후 복사

위 코드에서 Dialer 개체 다이얼러는 연결 시간 초과를 3초로 설정하는 데 사용되며, tcp 연결은 다이얼러를 통해 설정됩니다. 다이얼 기능. 3초 이내에 연결이 이루어지지 않으면 오류 메시지가 반환됩니다.

2. TCP 읽기 및 쓰기 시간 제한 설정

TCP 연결을 설정한 후 긴 대기 또는 느린 응답을 방지하려면 읽기 및 쓰기 시간 제한도 설정해야 합니다. golang의 net 패키지는 Conn이 읽기 및 쓰기 시간 제한을 설정할 수 있도록 SetReadDeadline 및 SetWriteDeadline 함수를 제공합니다.

  1. SetReadDeadline

SetReadDeadline 함수는 TCP 읽기 시간 제한을 설정하는 데 사용됩니다.

func (c *TCPConn) SetReadDeadline(t time.Time) error
로그인 후 복사

이 함수의 매개변수 t는 설정된 읽기 시간 제한을 나타냅니다. 이 시간 내에 데이터가 수신되지 않으면 오류 메시지가 반환됩니다.

사용 예:

conn, err := net.DialTimeout("tcp", "127.0.0.1:9000", 3*time.Second) if err != nil { fmt.Println("failed to connect:", err) return } defer conn.Close() _, err = conn.Write([]byte("hello")) if err != nil { fmt.Println("failed to write:", err) return } if err = conn.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil { fmt.Println("failed to set read deadline:", err) } buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { fmt.Println("failed to read:", err) return } fmt.Println(string(buf[:n]))
로그인 후 복사

위 코드에서는 conn.SetReadDeadline 함수를 통해 tcp 읽기 시간 제한을 3초로 설정했습니다. 이 시간 내에 연결이 데이터를 수신하지 못하면 시간 초과 오류 메시지가 반환됩니다.

  1. SetWriteDeadline

SetWriteDeadline 함수는 TCP 쓰기 시간 제한을 설정하는 데 사용됩니다.

func (c *TCPConn) SetWriteDeadline(t time.Time) error
로그인 후 복사

이 함수의 매개변수 t는 설정된 쓰기 제한 시간을 나타냅니다. 이 시간 내에 데이터가 전송되지 않으면 오류 메시지가 반환됩니다.

사용 예:

conn, err := net.DialTimeout("tcp", "127.0.0.1:9000", 3*time.Second) if err != nil { fmt.Println("failed to connect:", err) return } defer conn.Close() if err = conn.SetWriteDeadline(time.Now().Add(3 * time.Second)); err != nil { fmt.Println("failed to set write deadline:", err) } _, err = conn.Write([]byte("hello")) if err != nil { fmt.Println("failed to write:", err) return }
로그인 후 복사

위 코드에서는 conn.SetWriteDeadline 함수를 통해 tcp 쓰기 시간 제한을 3초로 설정했습니다. 이 시간 내에 연결이 데이터 전송을 완료하지 못하면 시간 초과 오류 메시지가 반환됩니다.

3. 참고링크

  1. net.Dialer: https://golang.org/pkg/net/#Dialer
  2. net.Conn.SetReadDeadline: https://golang.org/pkg/net/#Conn. SetReadDeadline
  3. net.Conn.SetWriteDeadline: https://golang.org/pkg/net/#Conn.SetWriteDeadline
  4. Golang TCP 클라이언트 예: https://www.linode.com/docs/guides/developing-udp- and-tcp-clients-and-servers-in-go/#golang-tcp-client-example

위 내용은 golang tcp 설정 시간 초과의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!