grpc客户端并发请求对端服务时,是否存在所谓连接池?

Posted fyxemmmm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grpc客户端并发请求对端服务时,是否存在所谓连接池?相关的知识,希望对你有一定的参考价值。

让我们来一探究竟~


直入正题


我们先定义两个proto文件

两个服务来处理不同的请求


接下来我们服务端注册这2个grpc service

grpc客户端并发请求对端服务时,是否存在所谓连接池?


好了,服务端我们已经初始化好了。接下来编写客户端

grpc客户端并发请求对端服务时,是否存在所谓连接池?

我们在init函数里,初始化了grpc客户端,并且在下面2个业务函数里分别使用这个客户端来调用服务端。


让我们来看看客户端在并发请求的情况下,是否grpc存在连接池的,创建了多个对象

grpc客户端并发请求对端服务时,是否存在所谓连接池?



开始吧!

启动客户端,并发请求service1和service2各50次

grpc客户端并发请求对端服务时,是否存在所谓连接池?


让我们看看他到底创建了多少个连接吧

发现tcp连接只维护了一条!就能响应如此多的请求!



我们再来看看wireshark抓包的情况



结论:

    grpc单个客户端并发请求,是使用的http2.0的多路复用的机制,不存在所谓的以socket为句柄的连接池。

    补:如果是mysql的连接,的确是创建了多个连接池,因为mysql本身协议并不是http2.0,而是在tcp层自己实现的。



以上是关于grpc客户端并发请求对端服务时,是否存在所谓连接池?的主要内容,如果未能解决你的问题,请参考以下文章

golang中grpc服务器中的并发模型

GO实现高可用高并发分布式系统:gRPC实现客户端与服务端的一对一通讯

GO实现高可用高并发分布式系统:使用gRPC实现一对多和多对多交互

为什么对gRPC做负载均衡会很棘手?

对GRPC的通用封装

Golang gRPC实现内网穿透