首页 > 其他分享 >gRPC

gRPC

时间:2023-07-12 16:32:50浏览次数:47  
标签:HTTP Protobuf gRPC grpc 连接 客户端

gRPC的特征:

  • 基于 HTTP/2, 继而 提供了连接多路复用、Body 和 Header 压缩等机制。可以节省带宽、降低TCP链接次数、节省CPU使用和延长电池寿命等。
  • 支持主流开发语言(C, C++, Python, PHP, Ruby, NodeJS, C#, Objective-C、Golang、Java)
  • IDL (Interface Definition Language) 层使用了 Protocol Buffers, 非常适合团队的接口设计

gRPC 协议 http://dongliu.net/post/622451

gRPC 的协议设计上使用了HTTP2 现有的语义,请求和响应的数据使用HTTP Body 发送,其他的控制信息则用Header 表示。

 

Protobuf 相关资料:

Protobuf简单使用及其抓包分析

 

Android gRPC protobuf的compile&generate问题
Android上使用gRPC时,proto的compile和generate不能用java的方法,要用javanano的
http://pokerg.github.io/gRPC/Android-gRPC-protobuf%E7%9A%84compile%26generate%E9%97%AE%E9%A2%98/ 

 

Protobuf 笔记1

 

HTTP2 的网络请求

HTTP2网络请求分析请参考

 

HTTP/2协议在TCP连接之初进行协商通信,只有协商成功,才会涉及到后续的请求-响应等具体的业务型数据交换。

客户端预先知道服务器提供HTTP/2支持, 则可以采用下面方式跟服务器建立连接。

 

HTTP/2的直接连接

客户端预先知道服务器提供HTTP/2支持, 连接流程如下:

  1. TCP的三次握手
  2. 客户端必须首先发送一个连接序言,其逻辑结构:
    PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n  // 纯字符串表示,翻译成字节数为24个字节
    SETTINGS帧                                // 其负载可能为空
  3. 发送完毕序言之后,客户端可以不用等待来自服务器端响应,马上发送HTTP/2其它帧
  4. 服务器端接收到客户端的连接序言之后,需要发送一个SETTINGS帧作为连接序言
  5. 任一端接收到SETTINGS帧之后,都需要返回一个包含确认标志位SETTIGN作为确认
  6. 其它帧的正常传输

 

 

GRPC的请求包

 

 

  • Http 请求的Path 部分用来表示调用哪个服务,格式是/{package}.{ServiceName}/{RpcMethodName},
  • content-type 目前取值都是application/grpc+proto,将来gRPC 支持除Protobuf 之外的协议如Json 时,会有别的值。
  • grpc-encoding 可以有gzip, deflate, snappy 等取值,表示采用的压缩方法。
  • grpc-timeout 表示调用的超时时间,单位有Hour(H), Minute(M), Second(S), Millisecond(m), Microsecond(u), Nanosecond(n) 等。

 

 

参考资料:

https://github.com/grpc/grpc-common/blob/master/PROTOCOL-HTTP2.md

http://dongliu.net/post/622451

标签:HTTP,Protobuf,gRPC,grpc,连接,客户端
From: https://blog.51cto.com/u_15588078/6701903

相关文章

  • golang GRPC example
    REF:  GolanggRPCExampleGoinstallationweshouldbetterbuildinagolangcontainer https://go.dev/doc/install#https://go.dev/dl/go1.20.2.linux-amd64.tar.gzwgethttps://go.dev/dl/go1.20.2.linux-amd64.tar.gz#wgethttps://golang.org/dl/go1.18.li......
  • 在 Go gRPC 中传递额外参数
    GogRPC是一个高性能、开源的RPC框架,它支持通过ProtocolBuffers进行序列化和反序列化,提供了简单易用的API,并且可以跨语言通信。在实际开发中,我们有时需要在gRPC方法之间传递一些额外的参数,例如请求头信息、跟踪ID、取消信号等。本文将介绍在GogRPC中如何传递这些额外......
  • go演示GRPC的用法
    首先,需要确保已经安装了Go编程语言和gRPC库。可以使用以下命令安装gRPC库:goget-ugoogle.golang.org/grpc下面是一个基本的gRPC示例,其中包括服务器端和客户端。示例演示了一个简单的计算器服务,客户端可以发送两个数字给服务器,然后服务器返回它们的和。首先,我们将定义一个.pr......
  • gRPC
    一、protobufgRPC传输用这个挺好的,跨语言调用足够简单序列化后体积小解析速度比XML块多语言支持兼容性好proto3这里就先不提proto2了文件后缀名是.proto1.开始部分syntax="proto3";//compileisproto3//生成的文件是处在哪个目录哪个包中,.代表在当前目录生......
  • gRPC学习记录--python
    gRPC学习记录基于:gRPC官方文档中文版v1.0目录gRPC学习记录gRPC是什么?应用在准备:安装安装Git安装gRPCPython使用protocolbuffersProtocolbuffers版本HelloWorfgRPC!定义服务生成gRPC代码写一个服务器服务实现服务端实现写一个客户端连接服务调用RPC试一下!gRPC......
  • gRPC 的 RoadMap 20160325 更新
    gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。下面我们就从HTTP2、ProtoBuf3、Nginx、gRPC的角度看他们的RoadMAP。HTTP22015年5月HTTP2协议正式版发布:RF......
  • gRPC
    grpc性能高:http2.0为什么比http1.1性能高?http/1.*:一次请求,一个响应,建立一个连接用完关闭,每一个请求都要建立一个连接http1.1pipeling:Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,......
  • gRPC入门与实操(.NET篇)
    为什么选择gRPC#历史#长久以来,我们在前后端交互时使用WebApi+JSON方式,后端服务之间调用同样如此(或者更久远之前的WCF+XML方式)。WebApi+JSON是优选的,很重要的一点是它们两者都是平台无关的三方标准,且足够语义化,便于程序员使用,在异构(前后端、多语言后端)交互场景下是不二......
  • 云原生时代崛起的编程语言Go远程调用gRPC实战
    @目录概述定义背景特点四种服务方法实战环境配置proto文件简单RPCToken认证服务器流式RPC客户端流式RPC双向流式RPC概述定义gRPC官网地址https://grpc.io/源码release最新版本v1.55.1gRPC官网文档地址https://grpc.io/docs/gRPC源码地址https://github.com/grpc/grp......
  • GO实现高可用高并发分布式系统:gRPC实现客户端与服务端的一对一通讯
    分布式系统的特点是不同的功能模块会以独立服务器程序的方式运行在不同主机上。当服务A想请求位于另一台机器的服务B完成特定请求时,就必须将要处理的数据提交给B。这个过程就涉及到一系列问题,首先A需要把数据进行序列化然后通过网络连接发送给B,B接收到数据后需要进行反序列化得到数......