zl程序教程

您现在的位置是:首页 >  后端

当前栏目

可视化gRPC语言堆栈

C语言 可视化 grp 堆栈
2023-09-14 08:57:38 时间
 

这是gRPC堆栈的高级概述。gRPC支持10种默认语言中的一种都有多层,可让您自定义应用程序中需要的部分。

gRPC中有三个主要堆栈:C核心,Go和Java。大多数语言都是基于C语言的薄包装 gRPC核心库:

包装语言:

 

gRPC核心堆栈

 

例如,一个Python应用程序调用生成的Python存根。这些调用通过拦截器传递,并进入包装库,在其中将调用转换为C调用。gRPC C核心将RPC编码为HTTP / 2,可以选择使用TLS加密数据,然后将其写入网络。

关于gRPC的很酷的事情之一就是您可以将这些部分交换出去。例如,您可以改用C ++,并使用进程内传输。这将使您不必一直深入到OS网络层。另一个示例是试用QUIC协议,该协议可让您快速打开新连接。能够在基于环境的各种传输上运行,使gRPC真正具有灵活性。

对于每种包装语言,默认的HTTP / 2实现内置于C-core库中,因此无需包含外部语言。但是,如您所见,可以自带(例如使用Chrome网络库Cronet)。

Go

gRPC-Go中,由于不必支持这么多的配置,因此堆栈要简单得多。这是Go堆栈的高级概述:

 

gRPC Go堆栈

 

这里的结构有些不同。由于只有一种语言,因此从堆栈顶部到底部的流程更加线性。与包装语言不同,gRPC Go可以使用其自己的HTTP / 2实现或Gonet/http包。

JAVA

这是gRPC-Java的高级概述 堆栈:

 

gRPC Java堆栈

 

同样,结构有些不同。Java支持像C核心一样的HTTP / 2,QUIC和In Process。但是,与C-Core不同,应用程序通常可以绕过生成的存根和拦截器,并直接与Java Core库对话。根据每种gRPC语言实现的需求,每种结构都略有不同。同样与包装语言不同,gRPC Java将HTTP / 2实现分离为可插入的库(例如Netty,OkHttp或Cronet)。