grpc客户端并发请求对端服务时,是否存在所谓连接池?
让我们来一探究竟~
直入正题
我们先定义两个proto文件
两个服务来处理不同的请求
接下来我们服务端注册这2个grpc service
好了,服务端我们已经初始化好了。接下来编写客户端
我们在init函数里,初始化了grpc客户端,并且在下面2个业务函数里分别使用这个客户端来调用服务端。
让我们来看看客户端在并发请求的情况下,是否grpc存在连接池的,创建了多个对象
开始吧!
启动客户端,并发请求service1和service2各50次
让我们看看他到底创建了多少个连接吧
发现tcp连接只维护了一条!就能响应如此多的请求!
我们再来看看wireshark抓包的情况
结论:
grpc单个客户端并发请求,是使用的http2.0的多路复用的机制,不存在所谓的以socket为句柄的连接池。
补:如果是mysql的连接,的确是创建了多个连接池,因为mysql本身协议并不是http2.0,而是在tcp层自己实现的。