1. بررسی اجمالی
gRPC یک چارچوب و مجموعه ابزار فراخوانی روش از راه دور از راه دور (RPC) بی طرف از نظر زبان و پلتفرم خنثی است که در گوگل توسعه یافته است. این به شما امکان می دهد یک سرویس را با استفاده از Protocol Buffers، یک مجموعه ابزار و زبان سریال سازی باینری قدرتمند تعریف کنید. سپس به شما این امکان را میدهد که از تعریف سرویس خود به زبانهای مختلف، کلاینت و سرور اصطلاحی ایجاد کنید.
در این کد لبه، شما یاد می گیرید که چگونه یک سرویس C# بسازید که یک API را با استفاده از چارچوب gRPC در معرض نمایش قرار دهد. شما با استفاده از یک کلاینت کنسول نوشته شده در سی شارپ که از توضیحات سرویس مشابه سرویس استفاده می کند، با این سرویس تعامل دارید.
چیزی که یاد خواهید گرفت
- زبان بافر پروتکل.
- نحوه پیاده سازی سرویس gRPC با استفاده از سی شارپ.
- نحوه پیاده سازی کلاینت gRPC با استفاده از سی شارپ.
- نحوه به روز رسانی سرویس gRPC
آنچه شما نیاز دارید
- یک مرورگر، مانند کروم یا فایرفاکس .
- Visual Studio 2013 یا جدیدتر نصب شده است.
- آشنایی با دات نت فریم ورک و زبان سی شارپ .
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با Google Cloud Platform چگونه ارزیابی می کنید؟
2. نمونه های gRPC C# را دانلود و بسازید
دانلود نمونه s
مخزن نمونه gRPC C# را به صورت یک فایل فشرده دانلود کرده و آن را استخراج کنید.
از طرف دیگر، می توانید مخزن git آن را شبیه سازی کنید.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
در هر صورت، باید یک پوشه grpc-samples-dotnet
با محتویات زیر داشته باشید:
راه حل را بسازید
پوشه برنامه نمونه حاوی GrpcSamples.sln
، یک راه حل ویژوال استودیو است. دوبار کلیک کنید تا راه حل در ویژوال استودیو باز شود. شما باید راه حلی را با تعدادی پروژه ببینید.
در بخش بعدی پروژه ها را با جزئیات بیشتری بررسی خواهیم کرد، اما ابتدا اجازه دهید پروژه را بسازیم. برای ساخت راه حل Build > Build Solution
یا Ctrl + Shift + B
بروید. با این کار تمام وابستگی ها از NuGet دانلود می شود و سپس برنامه کامپایل می شود.
در پایان، باید پیام Build succeeded
را در خروجی کنسول ویژوال استودیو مشاهده کنید.
3. نمونه Greeter را کاوش کنید
Greeter یک نمونه gRPC ساده است که در آن یک کلاینت درخواستی را با یک نام ارسال می کند و سرور با پیامی به دنبال نام پاسخ می دهد. یک پروژه Greeter وجود دارد که شامل تعریف سرویس مشترک (پرتو فایل) است که کلاینت و سرور بر اساس آن هستند.
پروژه سلام
این پروژه مشترک بین مشتری و سرور است. یک greeter.proto
دارد که تعریف سرویس gRPC است که کلاینت و سرور از آن استفاده می کنند. تعریف سرویس یک سرویس gRPC به نام GreetingService
را تعریف می کند و یک متد greeting
دارد که HelloRequest
را به عنوان ورودی و HelloResponse
به عنوان خروجی می گیرد.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
این یک روش unary (یعنی بدون جریان) است که در آن مشتری یک درخواست واحد ارسال می کند و یک پاسخ واحد از سرور دریافت می کند. می توانید بقیه مطالب greeter.proto.
این پروژه همچنین دارای یک اسکریپت به نام generate_protos.bat
است که می توان از آن برای تولید کلاینت و سرور از فایل پروتو استفاده کرد. این پروژه از قبل حاوی مقالات خرد مشتری و سرور تولید شده است، بنابراین نیازی نیست که آنها را به تنهایی تولید کنید. با این حال، اگر چیزی را در مورد فایل تعریف سرویس تغییر دهید، باید این اسکریپت را اجرا کنید تا موارد خرد را دوباره تولید کنید.
سرور Greeter
این پروژه برای سرور gRPC است. Program.cs
نقطه ورود اصلی است که در آن پورت و اجرای سرور راه اندازی می شود. کلاس مهم GreeterServiceImpl.cs
است. این یک روش greeting
دارد که در آن عملکرد واقعی پیاده سازی می شود.
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
مشتری سلام
این سمت مشتری سرویس gRPC است. همچنین دارای Program.cs
به عنوان نقطه ورودی است. یک کانال برای صحبت با سرور ایجاد می کند و سپس یک کلاینت با کانال از خرد تولید شده ایجاد می کند. سپس یک درخواست ایجاد کرده و با استفاده از خرد کلاینت به سرور ارسال می کند.
4. نمونه Greeter را اجرا کنید
ابتدا سرور Greeter را راه اندازی کنید. یک خط فرمان باز کنید و به پوشه bin > Debug
سرور Greeter بروید و فایل اجرایی را اجرا کنید. باید ببینید سرور در حال گوش دادن است.
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
بعد، Greeter Client را اجرا کنید. در یک خط فرمان جداگانه، به پوشه bin > Debug
سرور Greeter بروید و فایل اجرایی را اجرا کنید. باید مشاهده کنید که کلاینت در حال ارسال درخواست و دریافت پاسخ از سرور است.
> 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. نمونه Greeter را به روز کنید
بیایید ببینیم به روز رسانی سرویس ما چگونه است. یک روش جدید به سرویس gRPC خود اضافه کنید به نام خداحافظ که به جای سلام به مشتری، خداحافظی را برمیگرداند.
اولین قدم این است که فایل تعریف سرویس greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
در مرحله بعد، باید کلاینت و سرور را دوباره تولید کنید. در یک خط فرمان، generate_protos.bat
را اجرا کنید. پس از ایجاد خردهها، ممکن است لازم باشد پروژههای ویژوال استودیو خود را برای دریافت کدهای بهروز شده بهروزرسانی کنید.
در نهایت کد کلاینت و سرور را به روز کنید تا از روش جدید استفاده کنید. در سرویس، GreeterServiceImpl.cs
را به روز کنید و یک روش goodbye
جدید اضافه کنید.
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
در کلاینت، با روش goodbye
در Program.cs.
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
پروژه را دوباره بسازید و سرور و کلاینت را دوباره اجرا کنید. اکنون باید ببینید مشتری یک پیام خداحافظی دریافت می کند.
> 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. نمونه چت را کاوش کنید
همچنین یک ChatServer
و یک پروژه ChatWindowsClient
در راه حل وجود دارد. همانطور که از نام آن پیداست، این یک جفت سرویس گیرنده و سرور برای یک برنامه چت ساده است. پروژه Chat
دارای فایل تعریف سرویس به نام chat.proto
است. یک ChatService
با روش chat
تعریف می کند.
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
نکته مهم در اینجا این است که پیام های چت ورودی و خروجی هر دو با کلمه کلیدی stream
علامت گذاری می شوند. این اساساً اتصال را به یک جریان دو طرفه تبدیل می کند که در آن مشتری و سرور می توانند در هر زمان برای یکدیگر پیام ارسال کنند. راه حل عالی برای یک برنامه چت.
می توانید نمونه را بیشتر بررسی کنید، آن را بسازید و اجرا کنید تا ببینید که چگونه به عنوان یک تمرین عمل می کند.
7. تبریک می گویم!
آنچه را پوشش داده ایم
- زبان بافر پروتکل
- نحوه پیاده سازی سرویس gRPC با استفاده از سی شارپ.
- نحوه پیاده سازی کلاینت gRPC با استفاده از سی شارپ.
- نحوه به روز رسانی سرویس gRPC
مراحل بعدی
- درباره Windows در Google Cloud Platform بیشتر بیاموزید.
- درباره .NET در Google Cloud Platform بیشتر بیاموزید.
- درباره Cloud Tools for Visual Studio بیشتر بیاموزید.