vlambda博客
学习文章列表

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层自己实现的。