golang 使用 json-rpc 调用有时得到意外的 EOF

golang use json-rpc call sometime got unexpected EOF

提问人:Daunmingze 提问时间:8/7/2023 更新时间:8/7/2023 访问量:39

问:

我有一个客户端,将向haproxy发送请求,两个bankend.有时,客户端出现意外的EOF错误,但检查日志没有看到任何其他错误。我不知道。

这是客户端代码

 func (this *SingleConnRpcClient) Call(method string, args interface{}, reply interface{}) error {

    this.Lock()
    defer this.Unlock()

    err := this.serverConn()
    if err != nil {
        return err
    }

    timeout := time.Duration(10 * time.Second)
    done := make(chan error, 1)

    go func() {
        err := this.rpcClient.Call(method, args, reply)
        done <- err
    }()

    select {
    case <-time.After(timeout):
        this.close()
        tools.LogInfo(fmt.Sprintf("rpc call timeout %s", this.RpcServer))
    case err := <-done:
        if err != nil {
            this.close()
            return err
        }
    }

    return nil
}

服务器代码

addr := g.Config().Rpc.Listen
    tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
    if err != nil {
        log.Fatalf("net.ResolveTCPAddr fail: %s", err)
    }

    listener, err := net.ListenTCP("tcp", tcpAddr)
    if err != nil {
        log.Fatalf("listen %s fail: %s", addr, err)
    } else {
        log.Println("rpc listening", addr)
    }

    server := rpc.NewServer()
    server.Register(new(Transfer))

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Println("listener.Accept occur error:", err)
            continue
        }
        go server.ServeCodec(jsonrpc.NewServerCodec(conn))
    }

这是一个偶发性问题,没有发现任何线索。在检查日志之前和之后,只会出现这个偶尔的错误

eof json-rpc

评论


答: 暂无答案