首頁 >後端開發 >Golang >為什麼我的 Go Unix Socket Echo Server 斷開連線:單向通訊問題?

為什麼我的 Go Unix Socket Echo Server 斷開連線:單向通訊問題?

DDD
DDD原創
2024-12-02 21:16:12205瀏覽

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

Unix Socket 中的單向通訊:解決 Echo Server 斷開

在 Go 中,Unix Socket 提供了一種進程間通訊的機制。然而,在嘗試建立雙向連線時會出現一個常見問題,導致伺服器接收但不回應客戶端訊息。

問題

仔細觀察會發現範例中缺少一部分客戶端程式碼。當它向伺服器傳輸資料時,它不會讀取伺服器的回應。添加程式碼來解決此問題可以解決該問題。

已修正的客戶端程式碼

修正的客戶端程式碼包含一個從伺服器讀取資料的 goroutine。此外,延遲和中斷的使用確保了 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)
    }
}

最終想法

透過在客戶端程式碼中實現缺少的讀取功能,建立了雙向通信,允許客戶端接收並回應伺服器的訊息。這種方法確保了功能齊全的回顯伺服器和用戶端。

以上是為什麼我的 Go Unix Socket Echo Server 斷開連線:單向通訊問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn