Heim > Backend-Entwicklung > Golang > Warum trennt mein Go Unix Socket Echo Server die Verbindung: Ein unidirektionales Kommunikationsproblem?

Warum trennt mein Go Unix Socket Echo Server die Verbindung: Ein unidirektionales Kommunikationsproblem?

DDD
Freigeben: 2024-12-02 21:16:12
Original
166 Leute haben es durchsucht

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

Unidirektionale Kommunikation in Unix-Sockets: Beheben der Echo-Server-Verbindungsunterbrechung

In Go bieten Unix-Sockets einen Mechanismus für die Kommunikation zwischen Prozessen. Beim Versuch, eine bidirektionale Verbindung herzustellen, tritt jedoch häufig ein Problem auf, das dazu führt, dass der Server Client-Nachrichten empfängt, aber nicht darauf antwortet.

Das Problem

Bei näherer Betrachtung erkennt man, dass im Beispiel ein Teil fehlt Client-Code. Während es Daten an den Server überträgt, liest es nicht die Antwort des Servers. Durch Hinzufügen von Code zur Behebung dieses Problems wird das Problem behoben.

Korrigierter Client-Code

Der korrigierte Client-Code enthält eine Goroutine, die Daten vom Server liest. Darüber hinaus gewährleistet die Verwendung von „defer“ und „break“ eine ordnungsgemäße Bereinigung und Beendigung der Goroutine.

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)
    }
}
Nach dem Login kopieren

Abschließende Gedanken

Durch die Implementierung der fehlenden Lesefunktionalität im Client-Code wird eine bidirektionale Kommunikation hergestellt. Ermöglichen, dass der Client die Nachrichten des Servers empfängt und darauf reagiert. Dieser Ansatz gewährleistet einen voll funktionsfähigen Echo-Server und -Client.

Das obige ist der detaillierte Inhalt vonWarum trennt mein Go Unix Socket Echo Server die Verbindung: Ein unidirektionales Kommunikationsproblem?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage