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