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简单使用及其抓包分析
http://blog.csdn.net/wangqiuyun/article/details/42119835

 

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
http://www.cnblogs.com/ghj1976/p/4565846.html

 

HTTP2 的网络请求

HTTP2网络请求分析请参考:

http://www.cnblogs.com/ghj1976/category/697891.html 

 

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

时间: 2024-10-08 22:44:18

gRPC的相关文章

golang环境中grpc与zipkin的集成

对于分布式系统服务,一个请求需要系统中多个模块,上百台机器配合才能完成.当进行系统调优时单靠分析日志是很难发现到系能瓶颈的,效率非常低下,为此google上线了分布式服务追踪系统Drapper.目前市面上的实现有Twitter的zipkin和阿里的鹰眼系统.最近我在做服务追踪,我们后台使用golang开发,grpc做服务通信,最终选择集成zipkin来做,这个公开资料比较少,写文章来总结一下,方便后来者. 一.首先zipkin的安装使用 1.下载 wget -O zipkin.jar 'http

Google 高性能 RPC 框架 gRPC 1.0.0 发布(附精彩评论)

gRPC是一个高性能.开源.通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架. gRPC基于HTTP/2标准设计,带来诸如双向流.流控.头部压缩.单TCP连接上的多复用请求等特性.这些特性使得其在移动设备上表现更好,更省电且节省空间占用. gRPC 1.0版本是2015年面世以后的第一次版本发布,开发者可以把该版本用于生产.API现在也是很稳定的. 关于Java版本发布情况,大家阅读发布日志:https://github.com/g

grpc set up..

get the grpc source file.. 1 git clone https://github.com/grpc/grpc 2 git submodule update --init --recursive 3 cd third-party/protobuf 4 ./autogen.sh #this step consist of a step of curl getting gmock, might failed.. advice is to use thunder to down

gRPC的Go语言使用例子

gRPC刚被Google开源, gRPC是啥? 先照抄一段说明: gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言.gRPC提供了一种简单的方法来精确地定义服务和为iOS.Android和后台支持服务自动生成可靠性很强的客户端功能库.客户端充分利用高级流和链接功能,从而有助于节省带宽.降低的TCP链接次数.节省CPU使用.和电池寿命. 这段抄

谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC

Google 刚刚开源了grpc,  一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC  的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现,不过我在项目中采用WCF搭配Protobuf是一个很不错的RPC实现,Google这个框架是是基于HTTP2的,这是他有特色的地方,带来诸如双向流.流控.头部压缩.单TCP连接上的多复用

Windows上编译GRPC

Windows上源码编译多数开源软件都很麻烦 编译环境:VS2015(grpc支持2013及以上,2012上没有Nuget,编译起来要费劲的多) 编译GRPC涉及内容 grpc protobuf grpc_protoc_plugin(本文以c++语言为编译目标,因此只涉及grpc_cpp_plugin) zlib grpc代码下载后,执行git submodule update --init初始化依赖的submodule 1. protobuf 参考readme用CMAKE生成工程文件,编译即可

可以用grpc+delphi(远程调用)

datasnap用多账套+连接池,短连接,一个服务支持2000个客户端完全没有问题,你如果客户端量还大,可以考虑把datasnap做成集群 这个老方法了,可以用grpc+delphi.java+delphi.net都快死了.现在很多项目服务端都用golang http://www.grpc.io/docs/quickstart/cpp.html

gRPC Client的负载均衡器

一.gRPC是什么? gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言.gRPC提供了一种简单的方法来精确地定义服务和为iOS.Android和后台支持服务自动生成 可靠性很强的客户端功能库.客户端充分利用高级流和链接功能,从而有助于节省带宽.降低的TCP链接次数.节省CPU使用.和电池寿命. 二.为什么使用gRPC? 有了 gRPC, 我们

java 使用grpc步骤

1.配置grpc maven依赖 2.设置idea 插件 <build> <extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>1.4.1.Final</version> </extension> </extensions

gRPC中Any类型的使用(Java和NodeJs端)

工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf 3中的map和Any类型.在这个过程中遇到了一些困难,查阅资料时发现这一块的资料不是很多,尤其是在NodeJS的gRPC-Client处理google.protobuf.Any类型,完全找不到相关的资料.好在自己摸索和调试后解决了问题,因此记录下来以供他人之需. testservice.proto: