提问人:Daunmingze 提问时间:8/7/2023 更新时间:8/7/2023 访问量:39
golang 使用 json-rpc 调用有时得到意外的 EOF
golang use json-rpc call sometime got unexpected EOF
问:
我有一个客户端,将向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))
}
这是一个偶发性问题,没有发现任何线索。在检查日志之前和之后,只会出现这个偶尔的错误
答: 暂无答案
评论