1. Genel Bakış
gRPC Google'da geliştirilen, dilden bağımsız, platform açısından bağımsız bir uzak prosedür çağrısı (RPC) çerçevesi ve araç setidir. Özellikle güçlü bir ikili program serileştirme araç seti ve dili olan Protokol Arabelleklerini kullanarak hizmet tanımlamanızı sağlar. Daha sonra çeşitli dillerde hizmet tanımınızdan deyimsel istemci ve sunucu kökleri oluşturmanıza olanak tanır.
Bu codelab'de, gRPC çerçevesini kullanarak API sunan bir C# hizmeti oluşturmayı öğreneceksiniz. Bu hizmetle etkileşime geçmek için, C# dilinde yazılmış ve hizmetle aynı hizmet açıklamasını kullanan bir konsol istemcisi kullanılır.
Neler öğreneceksiniz?
- Protokol Arabelleği dili.
- C# kullanarak gRPC hizmeti uygulama.
- C# kullanarak gRPC istemcisi uygulama.
- gRPC hizmeti nasıl güncellenir?
Gerekenler
- Chrome veya Firefox gibi bir tarayıcı.
- Visual Studio 2013 veya sonraki sürümler yüklü olmalıdır.
- .NET Çerçevesi ve C# dili hakkında bilgi
Bu eğiticiden nasıl yararlanacaksınız?
Google Cloud Platform deneyiminizi nasıl değerlendirirsiniz?
2. gRPC C# örneklerini indirme ve derleme
Örnekleri indir
gRPC C# örneğini zip dosyası olarak indirin ve ayıklayın.
Alternatif olarak, git deposunu klonlayabilirsiniz.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
Her iki durumda da, aşağıdaki içeriğe sahip bir grpc-samples-dotnet
klasörünüz olmalıdır:
Çözümü oluşturun
Örnek uygulama klasörü, bir Visual Studio çözümü olan GrpcSamples.sln
değerini içerir. Çözümü Visual Studio'da açmak için çift tıklayın. Bir dizi proje içeren bir çözüm göreceksiniz.
Bir sonraki bölümde projelere daha ayrıntılı bir şekilde değineceğiz ama önce projeyi oluşturalım. Çözümü oluşturmak için Build > Build Solution
veya Ctrl + Shift + B
sayfasını ziyaret edin. Bu işlem, tüm bağımlıları NuGet'ten indirip uygulamayı derler.
Sonunda, Visual Studio konsol çıkışında Build succeeded
mesajı görürsünüz.
3. Karşılayıcı örneğini keşfedin
Karşılayıcı, bir istemcinin adı olan bir istek gönderdiği ve sunucunun, ardından adı geçen bir mesajla yanıt verdiği basit bir gRPC örneğidir. İstemci ile sunucunun temel aldığı ortak hizmet tanımını (proto dosyası) içeren bir Greeter projesi mevcut.
Greeter Projesi
Bu, istemci ile sunucu arasında paylaşılan ortak projedir. İstemci ve sunucunun kullandığı gRPC hizmet tanımı olan bir greeter.proto
içerir. Hizmet tanımı, GreetingService
adlı bir gRPC hizmetini tanımlar ve HelloRequest
öğesini giriş ve HelloResponse
öğesini çıkış olarak alan bir greeting
yöntemine sahiptir.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
Bu, istemcinin tek bir istek gönderdiği ve sunucudan tek bir yanıt aldığı tekli (akışsız) bir yöntemdir. greeter.proto.
içeriğinin geri kalanını keşfedebilirsiniz. Bu projede, proto dosyasından istemci ve sunucu saplamaları oluşturmak için kullanılabilecek generate_protos.bat
adlı bir komut dosyası da bulunur. Projede zaten oluşturulmuş istemci ve sunucu taslakları bulunduğundan bunları kendi başınıza oluşturmanız gerekmez. Ancak, hizmet tanım dosyasında bir şeyi değiştirirseniz saplamaları yeniden oluşturmak için bu komut dosyasını çalıştırmanız gerekir.
Karşılama Sunucusu
Bu, gRPC sunucusu projesidir. Program.cs
, bağlantı noktası ve sunucu uygulamasının ayarlandığı ana giriş noktasıdır. GreeterServiceImpl.cs
önemli sınıf. Gerçek işlevselliğin uygulandığı bir greeting
yöntemi içerir.
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
Greeter Müşterisi
Bu, gRPC hizmetinin istemci tarafıdır. Ayrıca giriş noktası olarak Program.cs
var. Sunucuyla konuşmak için bir kanal oluşturur, ardından oluşturulan saplamadan bu kanalı kullanarak bir istemci oluşturur. Ardından bir istek oluşturur ve istemci saplanmasını kullanarak bunu sunucuya gönderir.
4. Karşılayıcı örneğini çalıştır
İlk olarak Karşılayıcı Sunucusu'nu başlatın. Bir komut istemi açın, Karşılayıcı Sunucusu'nun bin > Debug
klasörüne gidin ve yürütülebilir dosyayı çalıştırın. Sunucu sizi dinleyecektir.
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
Ardından, Karşılayıcı İstemciyi çalıştırın. Ayrı bir komut isteminde, Karşılayıcı Sunucusu'nun bin > Debug
klasörüne gidin ve yürütülebilir dosyayı çalıştırın. İstemcinin isteği gönderdiğini ve sunucudan yanıt aldığını görmeniz gerekir.
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...
5. Karşılayıcı örneğini güncelleme
Şimdi hizmetimizi nasıl güncelleyeceğinize bakalım. gRPC hizmetimize, müşteriye merhaba yerine veda döndüren "bye" adlı yeni bir yöntem ekleyin.
İlk adım, greeter.proto.
hizmet tanımı dosyasını güncellemektir
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
Daha sonra, istemci ve sunucu saplamalarını yeniden oluşturmanız gerekir. Bir komut isteminde generate_protos.bat
komutunu çalıştırın. Koçanlar oluşturulduktan sonra, güncellenmiş kodu almak için Visual Studio projelerinizi yenilemeniz gerekebilir.
Son olarak, yeni yöntemden yararlanmak için istemci ve sunucu kodunu güncelleyin. Hizmette GreeterServiceImpl.cs
uygulamasını güncelleyin ve yeni bir goodbye
yöntemi ekleyin.
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
İstemcide, Program.cs.
içindeki goodbye
yöntemine çağrı yapın
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
Projeyi yeniden derleyip sunucuyu ve istemciyi tekrar çalıştırın. Müşterinin veda mesajı aldığını göreceksiniz.
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...
6. Chat örneğini keşfedin
Çözümde ChatServer
ve ChatWindowsClient
projesi de bulunur. Adından da anlaşılacağı gibi bu, basit bir sohbet uygulaması için kullanılan bir istemci ve sunucu çiftidir. Chat
projesinde chat.proto
adlı hizmet tanımı dosyası bulunuyor. chat
yöntemine sahip bir ChatService
tanımlar.
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
Burada önemli olan nokta, hem gelen hem de giden sohbet mesajlarının stream
anahtar kelimesiyle işaretlenmesidir. Bu temel olarak bağlantıyı, istemci ile sunucunun istedikleri zaman birbirine ileti gönderebildiği çift yönlü bir akışa dönüştürür; için mükemmel bir çözümdür.
Örneği daha ayrıntılı olarak inceleyebilir, derleyip çalıştırarak alıştırma olarak nasıl çalıştığını görebilirsiniz.
7. Tebrikler!
İşlediklerimiz
- Protokol Arabellek Dili.
- C# kullanarak gRPC hizmeti uygulama.
- C# kullanarak gRPC istemcisi uygulama.
- gRPC hizmeti nasıl güncellenir?
Sonraki Adımlar
- Google Cloud Platform'da Windows hakkında daha fazla bilgi edinin.
- Google Cloud Platform'da.NET hakkında daha fazla bilgi edinin.
- Cloud Tools for Visual Studio hakkında daha fazla bilgi edinin.