.NET使用gRPC
gRPC 简单介绍:
grpc 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
参考文档:
http://doc.oschina.net/grpc?t=57966
新建工程GrpcClient、GrpcServer和GrpcLibrary
添加 - 新建项目 - 控制台应用 GrpcClient、GrpcServer。
添加 - 新建项目 - 类库 GrpcLibrary。 工程中的三个项目情况如下:

使用程序包管理器控制台

安装程序包Grpc
三个项目GrpcClient、GrpcServer、GrpcLibrary均安装程序包Grpc。
Install-Package Grpc

安装程序包Google.Protobuf
三个项目GrpcClient、GrpcServer、GrpcLibrary均安装程序包Google.Protobuf 。
Install-Package Google.Protobuf
同上操作
安装程序包Grpc.Tools
类库GrpcLibrary安装程序包Grpc.Tools。
Install-Package Grpc.Tools
自定义服务
在项目GrpcLibrary里添加HelloWorld.proto用以生成代码。
syntax = "proto3";
package GrpcLibrary;
service GrpcService {
rpc SayHello (HelloRequest) returns (HelloReply) {}
} message HelloRequest {
string name = 1;
} message HelloReply {
string message = 1;
}
然后在命令行执行以下命令,注意执行命令的目录为packages 的上层目录
注意:生成协议代码需 protoc.exe、grpc_csharp_plugin.exe工具.
在.net framework 项目下引用安装 Grpc.Tools 会得到protoc.exe、grpc_csharp_plugin.exe,但.net core 项目引用安装是不会下载工具到项目目录的,所以我们需要建一个.net framework项目,
我建了个.net framework类库执行Install-Package Grpc.Tools用于引用安装得到工具。
获取grpc C# 的.cs文件
从packages\Grpc.Tools.1.19.0\tools\windows_x64文件夹下复制grpc_csharp_plugin.exe,protoc.exe复制到GrpcLibrary文件夹下
在GrpcLibrary下创建1.cmd文件,输入一下内容并保存
protoc -I . --csharp_out . --grpc_out . --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe HelloWorld.proto
双击执行
命令执行成功后,GrpcLibrary目录下会生成HelloWorld.cs和HelloWorldGrpc.cs。(记得包含到项目中)

最后GrpcClient、GrpcServer分别引用类库GrpcLibrary。
服务端
class GrpcImpl : GrpcService.GrpcServiceBase
{
// 实现SayHello方法
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
}
}
class Program
{
const int Port = 10007; public static void Main(string[] args)
{
Server server = new Server
{
Services = { GrpcService.BindService(new GrpcImpl()) },
Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
};
server.Start(); Console.WriteLine("GrpcService server listening on port " + Port);
Console.WriteLine("任意键退出...");
Console.ReadKey(); server.ShutdownAsync().Wait();
}
}
客户端
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Channel channel = new Channel("127.0.0.1:10007", ChannelCredentials.Insecure); var client = new GrpcService.GrpcServiceClient(channel); var input = Console.ReadLine();
var reply = client.SayHello(new HelloRequest { Name = input });
Console.WriteLine("来自" + reply.Message); channel.ShutdownAsync().Wait();
Console.WriteLine("任意键退出...");
Console.ReadKey();
}
}
测试
先启动服务的,再启动客户端。


.NET使用gRPC的更多相关文章
- gRPC源码分析1-SSL/TLS
引子 前几天看到微信后台团队分享了TLS相关文章,正好gRPC里TLS数据加密是很重要的一块,于是整理出了这篇文章. 在gRPC里,如果仅仅是用来做后端微服务,可以考虑不加密.本文太长,先给个大纲. ...
- gRPC源码分析2-Server的建立
gRPC中,Server.Client共享的Class不是很多,所以我们可以单独的分别讲解Server和Client的源码. 通过第一篇,我们知道对于gRPC来说,建立Server是非常简单的,还记得 ...
- gRPC源码分析0-导读
gRPC是Google开源的新一代RPC框架,官网是http://www.grpc.io.正式发布于2016年8月,技术栈非常的新,基于HTTP/2,netty4.1,proto3.虽然目前在工程化方 ...
- 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开 ...
- gRPC .NET Core跨平台学习
前些天发布gRPC C# 学习,在.NET Framework 中使用gRPC ,今天来学习 .NET Core gRPC. gRPC 的.NET Core 包在NuGet 上发布了,结合.NET C ...
- gRPC C#学习
前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...
- .net core 用grpc实现微服务
GRPC 是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以.NET Core 使用控制台.docker中演示如何使用G ...
- rpc框架之gRPC 学习 - hello world
grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...
- Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》
Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...
- gRPC+etcd的优势分析
相比webService等可跨平台,跨语言的服务相比,gRPC更增加了以下优势 1.可以采用二进制传输,速度更快 (使用TCP传输层,而不是Http2应用层) 2.集群服务,统一注册,可靠性高( 好的 ...
随机推荐
- Java的家庭记账本程序(L)
日期:2019.3.13 博客期:044 星期三 整理了两天,我终于也是把微信小程序平台的记账本软件完全开发出来了,并将我的微信账号与GitHub账号完成了绑定,那么我就先展示一部分作品,还有一部分代 ...
- 《剑指offer》整数中1出现的次数
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- EF的使用<三>
ExecuteSqlCommand与SqlQuery 在数据上下文DBModel的实例中有个Database属性,其中有两组方法.ExecuteSqlCommand()和.SqlQuery().它们都 ...
- IDEA上创建 Maven SpringBoot + zookeeper +dubbo 实例
概述 首先声明,本文是学习总结类型的博客内容,如有雷同纯属学习.本位主要结合zookeeper和dubbo做个简单实例.目前来说,一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越 ...
- python之验证码识别 特征向量提取和余弦相似性比较
0.目录 1.参考2.没事画个流程图3.完整代码4.改进方向 1.参考 https://en.wikipedia.org/wiki/Cosine_similarity https://zh.wikip ...
- Mybatis Annotation使用小结
Mybatis Annotation使用小结 之前一直有看过mybatis的注解使用方式,但没有去看过它的原理.今天看springboot-mybatis-annotation使用的时候,debug了 ...
- Java _类 相关知识
成员变量 java对象的属性就是成员变量,其实成员变量就是指普通的变量,可以设置初始值,也可以不设置.当不设置时,会被设置为默认值.(当成员变量前面有private关键词时,说明定义了一个私有成员) ...
- 习题集1b: 额外练习 (可选)
1.练习:4.样本特点 用来描述样本的数字叫做? □ 参数 (√)□ 统计量 □ 变量 □ 常数 2.练习:5.大一学生体重情况 Freidman 博士在一所大学任教,她记录了所在大学每位大一新生 ...
- bool值的底层应用场景
这里我们的if 或者while,还有and,or,not 等都是在内部调用一个对象的bool方法,然后返回True或者是False, a = [0, ] # a = [] # print(bool(a ...
- docker环境中安装node、pm2,映射项目文件守护程序
1.docker安装完成后,获取对应版本,可自定义node版本,默认为最新版本. git pull node:<version> 2.编写Dockerfile,在文件中添加安装pm2命令. ...