Terry-Mao / goim

goim
https://goim.io/
MIT License
7.2k stars 1.78k forks source link

newLogicClient 疑问 #305

Closed starsea closed 5 years ago

starsea commented 5 years ago

整个代码只有一个 rpc client 够用吗? 还是说我理解有误

func newLogicClient(c *conf.RPCClient) logic.LogicClient {
    ctx, cancel := context.WithTimeout(context.Background(), time.Duration(c.Dial))
    defer cancel()
    conn, err := grpc.DialContext(ctx, "discovery://default/goim.logic",
        []grpc.DialOption{
            grpc.WithInsecure(),
            grpc.WithInitialWindowSize(grpcInitialWindowSize),
            grpc.WithInitialConnWindowSize(grpcInitialConnWindowSize),
            grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(grpcMaxCallMsgSize)),
            grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(grpcMaxSendMsgSize)),
            grpc.WithBackoffMaxDelay(grpcBackoffMaxDelay),
            grpc.WithKeepaliveParams(keepalive.ClientParameters{
                Time:                grpcKeepAliveTime,
                Timeout:             grpcKeepAliveTimeout,
                PermitWithoutStream: true,
            }),
            grpc.WithBalancerName(roundrobin.Name),
        }...)
    if err != nil {
        panic(err)
    }
    return logic.NewLogicClient(conn)
}
tsingson commented 5 years ago

logic client 其他代码在 /api 下

starsea commented 5 years ago

我的意思是 这个client 就new了一次 所有的请求都是复用这个连接?

tsingson commented 5 years ago

我的意思是 这个client 就new了一次 所有的请求都是复用这个连接?

看 gRPC 说明吧, 这个是 gRPC client .

ouqiang commented 5 years ago

我的意思是 这个client 就new了一次 所有的请求都是复用这个连接?

是的, gRPC client可以并发调用

tonybase commented 5 years ago

我们内部所有微服务都是单个client conn,并结合后端多个节点进行负载均衡,避免创建很多客户端连接的消耗。