随笔 - 934, 文章 - 0, 评论 - 249, 阅读 - 345万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

gRPC

Posted on   蝈蝈俊  阅读(5438)  评论(1编辑  收藏  举报

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

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2014-06-19 golang 应用的部署相关技术
点击右上角即可分享
微信分享提示