Grpc for C#

  • Post author:
  • Post category:其他



Protobuf : https://developers.google.com/protocol-buffers/docs/csharptutorial​​​​​​​g

grpc :

gRPC 官方文档中文版_V1.0


C# | gRPC

protobuf笔记:

syntax = “proto3”;

package tutorial;

import “google/protobuf/timestamp.proto”;

option csharp_namespace = “Google.Protobuf.WellKnownTypes”;

#csharp_namespace已指定该选项以覆盖默认值,因此生成的代码使用命名空间 Google.Protobuf.Examples.AddressBook而不是 Tutorial.


1.每个元素上的“= 1”、“= 2”标记标识该字段在二进制编码中使用的唯一“标签”。标签编号 1-15 比更高的编号需要少一个字节来编码,因此作为一种优化,您可以决定将这些标签用于常用或重复的元素,而将标签 16 和更高的标签用于不太常用的可选元素。重复字段中的每个元素都需要重新编码标签号,因此重复字段特别适合这种优化

2.字段是repeated,则该字段可以重复任意次数(包括零次)。重复值的顺序将保存在协议缓冲区中。将重复字段视为动态大小的数组

3. 简单的message编译成C#类,使用protoc编译工具在您的.proto:上运行协议缓冲区编译器

protoc -I=. –csharp_out=. ./unity3D.proto

4. 每一个产生的类都有一个静态的Parser属性,用于解序列化本地的二进制文件

每个生成的类都有一个静态Descriptor属性

5.如果想将多条消息写入单个文件或流,需要我们自己跟踪一条消息的结束和下一条的开

最简单方法是在编写消息本身之前写入每条消息的大小。当您读回消息时,您读取大小,然后将字节读入单独的缓冲区,然后从该缓冲区解析

6.Protobuf不是为处理大的消息而设计的,如果大于1M,考虑另外的策略

7.

bytes类型: 可以包含不超过2^32个字节的任意序列 , 对应(Google.ProtoBuf中)C#的类型ByteString, 对应C++中的string

8.带有rpc服务的编译:

protoc –plugin=protoc-gen-grpc=grpc_csharp_plugin –csharp_out=OUT_DIR \

–grpc_out=OUT_DIR –grpc_opt=lite_client,no_server \

-I INCLUDE_DIR foo.proto


服务器流式 RPC

: 与我们的简单示例类似,不同之处在于服务器在收到客户端的请求消息后发回响应流。在发回所有响应后,服务器的状态详细信息(状态代码和可选状态消息)和可选的尾随元数据被发回以在服务器端完成。客户端在获得服务器的所有响应后完成。



版权声明:本文为gmf532196原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。