Go에서 Unix 소켓은 프로세스 간 통신을 위한 메커니즘을 제공합니다. 그러나 양방향 연결을 설정하려고 하면 서버가 클라이언트 메시지를 수신하지만 응답하지 않는 일반적인 문제가 발생합니다.
자세히 살펴보면 예제에서 누락된 부분을 알 수 있습니다. 클라이언트 코드. 서버로 데이터를 전송하는 동안 서버의 응답을 읽지 않습니다. 이 문제를 해결하는 코드를 추가하면 문제가 해결됩니다.
수정된 클라이언트 코드에는 서버에서 데이터를 읽는 고루틴이 포함되어 있습니다. 또한, 지연 및 중단을 사용하면 고루틴을 적절하게 정리하고 종료할 수 있습니다.
package main import ( "io" "log" "net" "time" ) func reader(r io.Reader) { buf := make([]byte, 1024) for { n, err := r.Read(buf[:]) if err != nil { return } println("Client got:", string(buf[0:n])) } } func main() { c, err := net.Dial("unix", "/tmp/echo.sock") if err != nil { panic(err) } defer c.Close() go reader(c) for { _, err := c.Write([]byte("hi")) if err != nil { log.Fatal("write error:", err) break } time.Sleep(1e9) } }
클라이언트 코드에 누락된 읽기 기능을 구현하여 양방향 통신이 설정됩니다. 클라이언트가 서버의 메시지를 수신하고 응답할 수 있도록 합니다. 이 접근 방식은 완전한 기능을 갖춘 에코 서버와 클라이언트를 보장합니다.
위 내용은 내 Go Unix 소켓 에코 서버 연결이 끊어지는 이유: 단방향 통신 문제?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!