gRPC C#学习
前些天gRPC 發布1.0 版本,代表著gRPC 已經正式進入穩定階段。?
今天我們就來學習gRPC C# 。而且目前也已經支持.NET Core 可以實現完美跨平臺。
傳統的.NET 可以通過Mono 來實現跨平臺調用。
GitHub:?https://github.com/grpc/grpc
gRPC 簡單介紹:
gRPC是一個高性能、通用的開源RPC框架,其由Google主要面向移動應用開發并基于HTTP/2協議標準而設計,基于ProtoBuf(Protocol Buffers)序列化協議開發,且支持眾多開發語言。gRPC提供了一種簡單的方法來精確地定義服務和為iOS、Android和后臺支持服務自動生成可靠性很強的客戶端功能庫??蛻舳顺浞掷酶呒壛骱玩溄庸δ?#xff0c;從而有助于節省帶寬、降低的TCP鏈接次數、節省CPU使用、和電池壽命。
gRPC支持多種語言,并能夠基于語言自動生成客戶端和服務端功能庫。目前,在GitHub上已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它語言的版本正在積極開發中,其中 grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等語言,grpc-java已經支持Android開發。
gRPC已經應用在Google的云服務和對外提供的API中,其主要應用場景如下:
低延遲、高擴展性、分布式的系統
同云服務器進行通信的移動應用客戶端
設計語言獨立、高效、精確的新協議
便于各方面擴展的分層設計,如認證、負載均衡、日志記錄、監控等
參考文檔:
http://www.infoq.com/cn/news/2015/03/grpc-google-http2-protobuf
本篇文章主要講解傳統.NET 應用如何支持gRPC。
下面就正式開始。
新建項目
首先我們創建一個gRPCDemo 的類庫。
然后添加兩個控制臺應用程序 gRPCServer gRPCClient。
最終項目結構如下:
定義服務
建好項目以后我們來定義服務
這里我們在gRPCDemo 項目里添加一個?helloworld.proto 內容如下:
下面主要定義一個gRPC 的服務里面有個?SayHello rpc 方法
syntax = "proto3"; package gRPCDemo; service gRPC {rpc SayHello (HelloRequest) returns (HelloReply) {} }message HelloRequest { ?string name = 1; }message HelloReply { ?string message = 1; }使用Grpc.Tools生成代碼
定義好服務以后我們就可以來生成代碼了。
首先需要添加引用:
在每個項目中添加上Grpc 及?Google.Protobuf?
Install-Package Grpc Install-Package Google.Protobuf然后在gRPCDemo 項目中再添加上工具?Grpc.Tools
NuGet 命令行:
Install-Package Grpc.Tools然后在命令行執行以下命令,注意執行命令的目錄為packages 的上層目錄
?
packages\Grpc.Tools.1.0.0\tools\windows_x86\protoc.exe -IgRPCDemo --csharp_out gRPCDemo gRPCDemo\helloworld.proto --grpc_out gRPCDemo --plugin=protoc-gen-grpc=packages\Grpc.Tools.1.0.0\tools\windows_x86\grpc_csharp_plugin.exe執行完以后,在gRPCDemo 目錄下會多出Helloworld.cs 及?HelloworldGrpc.cs 類,將其包含至gRPCDemo 項目既可。
然后gRPCServer gRPCClient 分別都引用?gRPCDemo。
?
創建服務端及客戶端
下面我們來編寫服務端及客戶端
?
首先是服務端:
?Program.cs?
? ?? ? ? ?return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });}} ?
? ?class Program{ ? ?
? ? ? ?const int Port = 9007; ?
? ? ? ?public static void Main(string[] args){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();}}
服務端需要實現SayHello 方法。
然后是客戶端 Program.cs
class Program{ ? ?? ? ? ?static void Main(string[] args){Channel channel = new Channel("127.0.0.1:9007", ChannelCredentials.Insecure); ? ?
?? ? ? ??var client = new gRPC.gRPCClient(channel); ? ? ? ? ?var reply= client.SayHello(new HelloRequest { Name = "LineZero" });Console.WriteLine("來自" + reply.Message);channel.ShutdownAsync().Wait();Console.WriteLine("任意鍵退出...");Console.ReadKey();}}
然后我們將Client 和Server 都生成一下。
分別到對應的目錄執行,首先啟動gRPCServer ,然后執行gRPCClient。
成功進行通信了,實現了gRPC。
?
本文源碼GitHub:https://github.com/linezero/Blog/tree/master/gRPCDemo?
相關文章:?
谷歌發布的首款基于HTTP/2和protobuf的RPC框架:GRPC
C#中使用gRPC
Google高性能RPC框架gRPC 1.0.0發布
原文地址:http://www.cnblogs.com/linezero/p/grpc.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
- 上一篇: ASP.NET Core开发-Docke
- 下一篇: 如果你也会C#,那不妨了解下F#(6):