Go의 차단 및 비차단 TCP 읽기
Go에서 TCP 연결을 사용할 때 읽기 작업은 일반적으로 비차단입니다. 이는 데이터를 아직 사용할 수 없는 경우에도 읽기 기능이 즉시 반환됨을 의미합니다. 그러나 어떤 경우에는 데이터가 수신될 때까지 기다리는 읽기 차단 작업을 수행하는 것이 바람직할 수 있습니다.
Go에서 읽기 차단을 활성화하는 것이 가능한가요?
내장된 읽기 기능은 비차단 기능이지만 Go는 읽기를 차단하는 직접적인 방법을 제공하지 않습니다. 그러나 차단 동작을 시뮬레이션할 수 있는 여러 가지 방법이 있습니다.
시뮬레이트된 차단 읽기를 위한 예제 코드
다음은 다음의 예입니다. 루프를 사용하여 차단 읽기 시뮬레이션:
<code class="go">func init_tcp() *net.TCPListener { laddr, err := net.ResolveTCPAddr("tcp", ":4243") if err != nil { log.Fatal(err) } tcp, err := net.ListenTCP("tcp", laddr) if err != nil { log.Fatal(err) } return tcp } func main() { tcp := init_tcp() conn, _ := tcp.Accept() data := make([]byte, 512) conn.SetNoDelay(false) for { // Repeat Read() until data is available for len(data) == 0 { conn.Read(data) } fmt.Println(data) // Reset data for next iteration data = make([]byte, 512) } }</code>
결론
Go의 TCP 읽기는 기본적으로 비차단이지만 다양한 방법을 사용하여 차단 동작을 시뮬레이션할 수 있습니다. 기법. 최선의 접근 방식은 애플리케이션의 특정 요구 사항에 따라 다릅니다. 시뮬레이션된 차단은 추가적인 오버헤드나 복잡성을 초래할 수 있으므로 신중하게 사용해야 합니다.
위 내용은 Go에서 TCP 읽기 차단을 어떻게 달성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!