在分布式高并发服务器中,client到server以及server中的多个节点之间的连贯往往应用连接池来治理。简略来说就是将提前创立好的连贯保留在池中,当有申请到来时,间接应用连接池中的连贯对server端拜访,省去了创立连贯和销毁连贯的开销(TCP建设连贯时的三次握手和开释连贯时的四次挥手),从而进步了性能。
GRPC的两个个性:多路复用、超时重连。
多路复用GRPC应用HTTP/2作为应用层的传输协定,HTTP/2会复用底层的TCP连贯。每一次RPC调用会产生一个新的Stream,每个Stream蕴含多个Frame,Frame是HTTP/2外面最小的数据传输单位。同时每个Stream有惟一的ID标识,如果是客户端创立的则ID是奇数,服务端创立的ID则是偶数。如果一条连贯上的ID应用完了,Client会新建一条连贯,Server也会给Client发送一个GOAWAY Frame强制让Client新建一条连贯。一条GRPC连贯容许并发的发送和接管多个Stream,而管制的参数便是MaxConcurrentStreams,Golang的服务端默认是100。
超时重连咱们在通过调用Dial或者DialContext函数创立连贯时,默认只是返回ClientConn构造体指针,同时会启动一个Goroutine异步的去建设连贯。如果想要等连贯建设完再返回,能够指定grpc.WithBlock()传入Options来实现。超时机制很简略,在调用的时候传入一个timeout的context就能够了。重连机制通过启动一个Goroutine异步的去建设连贯实现的,能够防止服务器因为连贯闲暇工夫过长敞开连贯、服务器重启等造成的客户端连贯生效问题。也就是说通过GRPC的重连机制能够完满的解决连接池设计准则中的闲暇连贯的超时与保活问题。
举荐开源我的项目: https://github.com/grpc-ecosy...
gRPC-Gateway是protoc的插件.它读取gRPC服务定义并生成反向代理服务器,将 RESTful JSON API转换为gRPC.此服务器是依据你的gRPC定义中的自定义选项生成的.
gRPC-Gateway可帮忙你同时提供gRPC和RESTful格调的API.