在C#中使用gRPC及protobuf简介
来源:互联网 发布:传染病监测数据分析 编辑:程序博客网 时间:2024/06/05 18:34
简介
gRPC提供了很多的语言开发包,C#也可以很容易使用。结合使用protobuf及其编译器,很容易地生成了gRPC的服务stub和proxy。
在CSharp中使用gRPC和Protobuf,可以简单地使用Nuget安装grpc和protobuf的支持包。
protobuf的编译器使用各种语言的支持插件,可以创建各种语言的Message及序列化操作列,以及grpc服务定义类。这些插件有java、c#、python……。
简单示例
此示例创建一个gRPC的服务,已经调用client端。利用了protobuf定义文件和protobuf编译器来自动生成框架。
定义一个库项目
在这个库中,使用protobuf定义传递的Message,已经service的api定义。如下的`grpchello.pb`这是一个protobuf定义文件。
syntax = "proto3";package grpcDemo;message HelloRequest { string name = 1;}message HelloReply { string message = 1;}service gRPC { rpc SayHello (HelloRequest) returns (HelloReply) {}}
接着需要使用protobuf编译器,编译准备好的protobuf定义文件,为我们生成服务定义和消息定义等各种class。
- 先使用nuget安装grpc和protobuf包:搜索Grpc包和Google.Protobuf依赖包,这2个包在下面的server和client工程中也需要安装。
- 这个库因为需要使用protobuf的编译器,还需要安装一个Grpc.Tools的工具包。
在安装了Grpc.Tools后,在solution目录下的packages\Grpc.Tools.1.4.1\tools\windows_x64下,包括了protoc.exe已经cs的生成插件grpc_csharp_plugin.exe。然后我们可以使用它们编译protobuf定义文件,生成cs源码了。
到protoc.exe命令的对应目录下,执行
packages\Grpc.Tools.1.4.1\tools\windows_x64\protoc.exe -IgrpcDemo --csharp_out grpcDemo --grpc_out grpcDemo --plugin=protoc-gen-grpc=packages\Grpc.Tools.1.4.1\tools\windows_x64\grpc_csharp_plugin.exe grpcDemo\grpchello.pb
执行后,会生成Grpchello.cs和GrpchelloGrpc.cs源码文件。将源码文件添加到工程中,然后编译好库文件。
- 在Grpchello.cs类,定义了传递的Message。
- 在GrpchelloGrpc.cs中,定义了grpc服务stub和proxy的形式。
插件grpc的服务端
现在,根据我们定义的grpc服务接口API,我们需要实现服务,为调用的客户端提供服务。
创建一个应用工程,就使用最简单的Console 应用。添加上面的库工程依赖。然后使用Nuget安装Grpc依赖。
- 实现服务API
实现gRPC.gRPCBase类,实现我们定义的方法。
class gRPCImpl : gRPC.gRPCBase { // 实现SayHello方法 public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) { Console.WriteLine("Get : " + request.Name); return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } }
- 在应用中启动服务
使用Grpc.Core中提供的Server类,指定服务端口,和提供服务的实现类。
using Grpc.Core;using GrpcDemo;//....class Program { static void Main(string[] args) { const int Port = 9007; Server server = new Server { Services = { gRPC.BindService(new gRPCImpl()) }, Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) } }; server.Start(); Console.WriteLine("gRPC server listening on port " + Port); Console.WriteLine("任意键退出..."); Console.ReadKey(); server.ShutdownAsync().Wait(); } }
创建客户端
为使用grpc服务,需要一个客户端。简单地创建一个Console App应用。
然后添加Grpc依赖包,和开始的工程依赖库grpcDemo。
using Grpc.Core;using GrpcDemo;//....class Program { static void Main(string[] args) { Channel channel = new Channel("127.0.0.1:9007", ChannelCredentials.Insecure); var client = new gRPC.gRPCClient(channel); for (int i = 0; i < 5; i++) { var reply = client.SayHello(new HelloRequest { Name = " -- client "+ i}); Console.WriteLine("来自" + reply.Message); } channel.ShutdownAsync().Wait(); Console.WriteLine("任意键退出..."); Console.ReadKey(); } }
如示例所示,客户端通过一个channel创建一个gRPCClient,在Channel中指定了服务地址和安全方式,client为服务的proxy。调用方式很简单,和普通的API一致。
执行测试
编译完成后,分别到服务端和客户端,启动应用,可以看到调用及结果。
- 在C#中使用gRPC及protobuf简介
- 在python中使用grpc和protobuf
- C#中使用gRPC
- java中使用grpc和protobuf
- protobuf + grpc 使用入门 一
- protobuf + grpc 使用入门 二
- Go实战--golang中使用gRPC和Protobuf实现高性能api(golang/protobuf、google.golang.org/grpc)
- Grpc在Android中的封装及使用
- C# 使用 grpc
- c#使用grpc
- 在c++中使用protobuf
- 在 Golang 中使用 Protobuf
- 在 Golang 中使用 Protobuf
- 在Unity5中使用Protobuf
- 在egret中使用protobuf
- 在VS中使用Protobuf
- 在Unity5中使用Protobuf
- protobuf在C#项目中的使用
- 趣图:刚以为要出遗留项目的坑了,结果又…
- ExoPlayer播放视频的简单使用及播放视频宽高设置的源码分析
- 谷歌 TensorFlow 稳居第一:23 个深度学习库的排名
- 提升编程能力万无一失的办法,你试过了么?
- 递归获取下级数据
- 在C#中使用gRPC及protobuf简介
- 关于Idea导入已有web项目
- jasper报错java.lang.ExceptionInInitializerError net.sf.jasperreports.engine.fill.JRBaseFiller
- 每天一个Linux命令—mkdir
- Python数据结构之二叉排序树
- Codeforces Round 444 div2 D Ratings and Reality Shows (双指针)
- 关于java.sql.SQLException: Connections could not be acquired from the underlying database!
- Spark 1.6 内存管理模型( Unified Memory Management)分析
- Qt中建立DockWidget的代码