C# 使用 grpc
2017-01-21 14:06
253 查看
孙广东 2016.12.21http://blog.csdn.NET/u010019717
GitHub: https://github.com/grpc/grpc
gRPC 官方文档中文版 : http://doc.oschina.net/grpc?t=60132
基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。
然后在当前解决方案下 添加两个控制台应用程序 grpcServer 、grpcClient。
前面说了, grpc基于 Protobuffer, 所以
下面主要定义一个gRPC 的 服务里面有个 SayHello rpc 方法
syntax ="proto3";
packagegrpcTesst;
servicegRPC {
rpc SayHello (TestRequest) returns(TestReply) {}
}
messageTestRequest {
string name = 1;
}
messageTestReply {
string message = 1;
}
首先需要添加引用:
在每个项目中添加上Grpc 及 Google.Protobuf
切换项目简单:
NuGet 命令行(视图-> 其他窗口 -> 程序包管理器控制台):
Install-Package Grpc
Install-Package Google.Protobuf
然后在 grpcTest 项目中再添加上工具 Grpc.Tools(要生成源文件)
Install-Package Grpc.Tools
CMD命令行来到解决方案下目录下(目录为packages 的上层目录)
然后输入下列命令(你可以把 rpcTest 该成你项目的名字!):
packages\Grpc.Tools.1.0.0\tools\windows_x86\protoc.exe-IgrpcTest --csharp_out grpcTest grpcTest\test.proto --grpc_out grpcTest --plugin=protoc-gen-grpc=packages\Grpc.Tools.1.0.0\tools\windows_x86\grpc_csharp_plugin.exe
跟 Protobuffer 类似啦~~~~
执行完以后,在 grpcTest 目录下会多出 Test.cs 及 TestGrpc.cs 类,将其包含至grpcTest 项目既可( 项目上右键-》 添加-》现有项 选择文件就行了)。
然后 grpcServer、 grpcClient 分别都引用 grpcTest ( 项目引用节点上 右键-》 添加引用-》 项目 解决方案 下 选择项目 确定 就行了)。
首先是服务端:
将默认 Program.cs 文件 按F2 重命名 为 TestServer.cs (注: 在 解决方案面板上操作,会提示 是否同时修改相关的引用, 选择是!)
usingGrpc.Core;
usingGrpcTesst;
usingSystem;
usingSystem.Threading.Tasks;
namespacegrpcServer
{
class gRPCImpl : gRPC.gRPCBase
{
// 实现SayHello方法
public override Task<TestReply>SayHello(TestRequest request, ServerCallContext context)
{
return Task.FromResult(newTestReply { Message = "Hello " + request.Name });
}
}
class TestServer
{
const int Port = 9007;
public static void Main(string[] args)
{
Server server = new Server
{
Services= { gRPC.BindService(new gRPCImpl()) },
Ports = { newServerPort("localhost", Port, ServerCredentials.Insecure) }
};
server.Start();
Console.WriteLine("gRPC serverlistening on port " + Port);
Console.WriteLine("任意键退出...");
Console.ReadKey();
server.ShutdownAsync().Wait();
}
}
}
服务端需要实现SayHello方法。
然后是客户端:
将默认 Program.cs 文件 按F2 重命名 为 TestClient.cs (注: 在 解决方案面板上操作,会提示 是否同时修改相关的引用, 选择是!)
usingGrpc.Core;
usingGrpcTesst;
usingSystem;
namespacegrpcClient
{
class TestClient
{
static void Main(string[] args)
{
Channel channel = newChannel("127.0.0.1:9007", ChannelCredentials.Insecure);
var client = newgRPC.gRPCClient(channel);
var reply = client.SayHello(newTestRequest { Name = "sunguangdong" });
Console.WriteLine("来自" +reply.Message);
channel.ShutdownAsync().Wait();
Console.WriteLine("任意键退出...");
Console.ReadKey();
}
}
}
在这两个项目上右键 生成。
分别到对应的目录执行,首先启动grpcServer.exe,然后执行grpcClient.exe。
成功进行通信了,实现了gRPC。
它们之间的 通信使用Grpc.Core中的 Services 和 Channel 来通信。
GitHub: https://github.com/grpc/grpc
gRPC 官方文档中文版 : http://doc.oschina.net/grpc?t=60132
基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。
然后在当前解决方案下 添加两个控制台应用程序 grpcServer 、grpcClient。
前面说了, grpc基于 Protobuffer, 所以
定义服务
这里我们在 grpcTest 项目里添加一个 test.proto 内容如下:下面主要定义一个gRPC 的 服务里面有个 SayHello rpc 方法
syntax ="proto3";
packagegrpcTesst;
servicegRPC {
rpc SayHello (TestRequest) returns(TestReply) {}
}
messageTestRequest {
string name = 1;
}
messageTestReply {
string message = 1;
}
使用Grpc.Tools生成代码
有了服务,开始生成代码!首先需要添加引用:
在每个项目中添加上Grpc 及 Google.Protobuf
切换项目简单:
NuGet 命令行(视图-> 其他窗口 -> 程序包管理器控制台):
Install-Package Grpc
Install-Package Google.Protobuf
然后在 grpcTest 项目中再添加上工具 Grpc.Tools(要生成源文件)
Install-Package Grpc.Tools
CMD命令行来到解决方案下目录下(目录为packages 的上层目录)
然后输入下列命令(你可以把 rpcTest 该成你项目的名字!):
packages\Grpc.Tools.1.0.0\tools\windows_x86\protoc.exe-IgrpcTest --csharp_out grpcTest grpcTest\test.proto --grpc_out grpcTest --plugin=protoc-gen-grpc=packages\Grpc.Tools.1.0.0\tools\windows_x86\grpc_csharp_plugin.exe
跟 Protobuffer 类似啦~~~~
执行完以后,在 grpcTest 目录下会多出 Test.cs 及 TestGrpc.cs 类,将其包含至grpcTest 项目既可( 项目上右键-》 添加-》现有项 选择文件就行了)。
然后 grpcServer、 grpcClient 分别都引用 grpcTest ( 项目引用节点上 右键-》 添加引用-》 项目 解决方案 下 选择项目 确定 就行了)。
创建服务端及客户端
下面我们来编写服务端及客户端首先是服务端:
将默认 Program.cs 文件 按F2 重命名 为 TestServer.cs (注: 在 解决方案面板上操作,会提示 是否同时修改相关的引用, 选择是!)
usingGrpc.Core;
usingGrpcTesst;
usingSystem;
usingSystem.Threading.Tasks;
namespacegrpcServer
{
class gRPCImpl : gRPC.gRPCBase
{
// 实现SayHello方法
public override Task<TestReply>SayHello(TestRequest request, ServerCallContext context)
{
return Task.FromResult(newTestReply { Message = "Hello " + request.Name });
}
}
class TestServer
{
const int Port = 9007;
public static void Main(string[] args)
{
Server server = new Server
{
Services= { gRPC.BindService(new gRPCImpl()) },
Ports = { newServerPort("localhost", Port, ServerCredentials.Insecure) }
};
server.Start();
Console.WriteLine("gRPC serverlistening on port " + Port);
Console.WriteLine("任意键退出...");
Console.ReadKey();
server.ShutdownAsync().Wait();
}
}
}
服务端需要实现SayHello方法。
然后是客户端:
将默认 Program.cs 文件 按F2 重命名 为 TestClient.cs (注: 在 解决方案面板上操作,会提示 是否同时修改相关的引用, 选择是!)
usingGrpc.Core;
usingGrpcTesst;
usingSystem;
namespacegrpcClient
{
class TestClient
{
static void Main(string[] args)
{
Channel channel = newChannel("127.0.0.1:9007", ChannelCredentials.Insecure);
var client = newgRPC.gRPCClient(channel);
var reply = client.SayHello(newTestRequest { Name = "sunguangdong" });
Console.WriteLine("来自" +reply.Message);
channel.ShutdownAsync().Wait();
Console.WriteLine("任意键退出...");
Console.ReadKey();
}
}
}
在这两个项目上右键 生成。
分别到对应的目录执行,首先启动grpcServer.exe,然后执行grpcClient.exe。
成功进行通信了,实现了gRPC。
它们之间的 通信使用Grpc.Core中的 Services 和 Channel 来通信。
相关文章推荐
- c#使用grpc
- gRPC在c#中的使用(服务端)
- C#中使用gRPC
- C#中使用gRPC
- 在C#中使用gRPC及protobuf简介
- 初识google多语言通信框架gRPC系列(三)C#中使用gRPC
- C# Builder 使用心得
- C#中事件的使用
- 如何在C#中使用 Win32和其他库
- 开始使用C#
- 磁盘配额的WMI版本(还是使用C#)
- 源码推荐:一个使用C#绘制图形引擎的Framework
- 你还在为使用P/Invoke时,写不出win32 api对应的C#声明而犯愁吗?
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#) skyover [原作]
- C#中使用Property Grid 控件 学习笔记(一)
- 使用C#+ASP.NET来进行RSA(非对称)加密.
- 使用C#开发一个简单的P2P应用
- 使用C#制作的更换桌面背景程序
- 如何使用C#创建一个三层的数据库应用程序
- C# Builder 使用心得