首页 >后端开发 >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