>백엔드 개발 >Golang >내 Go Unix 소켓 에코 서버 연결이 끊어지는 이유: 단방향 통신 문제?

내 Go Unix 소켓 에코 서버 연결이 끊어지는 이유: 단방향 통신 문제?

DDD
DDD원래의
2024-12-02 21:16:12161검색

Why Does My Go Unix Socket Echo Server Disconnect: A Unidirectional Communication Problem?

Unix 소켓의 단방향 통신: Echo 서버 연결 끊김 해결

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.