在 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中文網其他相關文章!