You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 3.0 KiB

2 weeks ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. ## 简要介绍
  2. ### 什么是 grpc ?
  3. ```azure
  4. gRPC是rpc框架中的一种,是一个高性能,开源和通用的RPC框架,基于Protobuf序列化协议开发,且支持众多开发语言。
  5. gRPC可以通俗的理解为google对于RPC的一种实现形式。
  6. ```
  7. ### grpc 特性
  8. ```azure
  9. grpc可以跨语言使用。支持多种语言 支持C++、Java、Go、Python、Ruby、C#、Node.js、Android Java、Objective-C、PHP等编程语言
  10. 基于 IDL ( 接口定义语言(Interface Define Language))文件定义服务,通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub;
  11. 通信协议基于标准的 HTTP/2 设计,支持·双向流、消息头压缩、单 TCP 的多路复用、服务端推送等特性,这些特性使得 gRPC 在移动端设备上更加省电和节省网络流量;
  12. 序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种语言无关的高性能序列化框架,基于 HTTP/2 + PB, 保障了 RPC 调用的高性能。
  13. 安装简单,扩展方便(用该框架每秒可达到百万个RPC)
  14. ```
  15. ### 什么是 Protocol Buffers ?
  16. ```azure
  17. gRPC默认使用protocl buffers(简称 Protobuf),Protobuf 是谷歌成熟的开源的用于结构化数据序列化的机制存储方案,类似于XML、Json。
  18. ```
  19. ![image-20220113153420444](static/images/protocol.webp)
  20. ### 使用Protocol Buffers
  21. - 第一步:使用 .proto文件(以.proto为后缀的二进制文本文件)定义待序列化数据的结构
  22. ```azure
  23. message Person {
  24. string name = 1;
  25. int32 id = 2;
  26. bool has_ponycopter = 3;
  27. }
  28. ```
  29. - 第二步:使用 protocol buffer 的编译器protoc从proto定义生成选择语言的数据接入层类。
  30. ```azure
  31. // greeter 服务定义.
  32. service Greeter {
  33. // Sends a greeting
  34. rpc SayHello (HelloRequest) returns (HelloReply) {}
  35. }
  36. // 客户端请求消息包含用户名.
  37. message HelloRequest {
  38. string name = 1;
  39. }
  40. // 服务端响应包含一条greeting消息
  41. message HelloReply {
  42. string message = 1;
  43. }
  44. ```
  45. gRPC使用带有特殊gRPC插件的protoc来生成proto文件中的代码。 但是,使用gRPC插件,您可以生成gRPC客户端和服务器代码,以及用于填充,序列化和检索消息类型的常规protocol buffer 代码。你可以从Protocol Buffers文档中获取到更多有关protocol buffer的信息,并能够获取到如何获取安装和你选定语言相关的protoc。
  46. ### Protocol buffer 版本
  47. ```
  48. 虽然protocol buffer 被开源用户使用已经有一段时间,但我们的示例使用了一种新的protocol buffer,称为proto3,它具有略微简化的语法,一些有用的新功能,并支持更多语言。
  49. proto3目前已经支持Java,C++,Python,Objective-C,C#,Ruby和JavaScript,也实现了对Go语言的支持。
  50. 通常,虽然也可以使用proto2(当前默认protocol buffer版本),但建议将proto3与gRPC一起使用,因为它允许您使用全系列gRPC支持的语言,
  51. 并避免使用proto2客户端与使用proto3服务端通信时的兼容性问题,反之亦然。
  52. ```