杭州东站列车时刻表,秦梦擎,黄尚武私房作品合集
什么是grpc
grpc是google开源的一个高性能、跨语言的rpc框架,基于http2协议,采用protobuf 定义的idl。
grpc 的主要优点是:
这些优点使 grpc 适用于:
更多介绍请前往
开始
netcore3.0中已经加入了grpc的模板项目.
1,打开vs2019,创建一个asp.net core web项目
2,选择asp.net core 3.0就会出现grpc模板,点击创建。
如果没安装core3的sdk请前往下载最新版本安装,
如果你已经安装了core 3.0的sdk却还是无法显示其选项,工具 > 选项 ,勾选“使用 .net core sdk 预览版”
3,模板只有一个服务端项目,需要自行创建一个客户端来做演示,创建一个.netcore的控制台程序即可。
客户端需要安装以下三个包
服务端代码
greet.proto,proto相关语法只是,前往 ,可能需要梯子。
syntax = "proto3"; package greet; // the greeting service definition. service greeter { // sends a greeting rpc sayhello (hellorequest) returns (helloreply) {} } // the request message containing the user's name. message hellorequest { string name = 1; enum language{ en_us = 0; //枚举必须以0开始 zh_cn = 1; } language languageenum = 2; } // the response message containing the greetings. message helloreply { string message = 1; int32 num = 2; int32 adsa = 3; }
greeterservice
public class greeterservice : greeter.greeterbase { public override task<helloreply> sayhello(hellorequest request, servercallcontext context) { var greeting = string.empty; switch (request.languageenum) { case hellorequest.types.language.enus: greeting = "hello"; break; case hellorequest.types.language.zhcn: greeting = "你好"; break; } return task.fromresult(new helloreply { message = $"{greeting} {request.name}", num = new random().next() }); } }
客户端代码
添加greet.proto文件,将protos\greet.proto文件从服务端复制到客户端项目。将greet.proto文件路径添加到项目文件grpcdemo.client.csproj的<itemgroup>节点内。
这里我们不复制,直接定位到相关路径即可。
grpcdemo.client.csproj
<project sdk="microsoft.net.sdk"> <propertygroup> <outputtype>exe</outputtype> <targetframework>netcoreapp3.0</targetframework> </propertygroup> <itemgroup> <packagereference include="google.protobuf" version="3.7.0" /> <packagereference include="grpc.core" version="1.20.1" /> <packagereference include="grpc.tools" version="1.20.1"> <privateassets>all</privateassets> <includeassets>runtime; build; native; contentfiles; analyzers; buildtransitive</includeassets> </packagereference> <!-- include支持*匹配 --> <!-- grpcservices="client"添加该属性构建相关客户端类文件(元数据) --> <protobuf include="..\grpcdemo.server\protos\*.proto" grpcservices="client" /> </itemgroup> </project>
program.cs
static async task main(string[] args) { var serveraddress = "localhost:50051"; //创建连接通道,端口80 var channel = new channel(serveraddress, channelcredentials.insecure); var client = new greeter.greeterclient(channel); //请求 var reply1 = await client.sayhelloasync( new hellorequest { name = "wu", languageenum = hellorequest.types.language.enus }); console.writeline($"{reply1.message} num:{reply1.num}"); var reply2 = await client.sayhelloasync( new hellorequest { name = "wu", languageenum = hellorequest.types.language.zhcn }); console.writeline($"{reply2.message} num:{reply2.num}"); //使用完后应释放资源 await channel.shutdownasync(); console.writeline("已断开连接"); console.writeline("press any key to exit..."); console.readkey(); }
运行
demo地址 https://github.com/wwwu/grpcdemo
参考文档
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0
https://developers.google.com/protocol-buffers/docs/proto3
https://grpc.io/docs/guides/
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论