ساخت سرویس gRPC با سی شارپ

1. بررسی اجمالی

gRPC یک چارچوب و مجموعه ابزار فراخوانی روش از راه دور از راه دور (RPC) بی طرف از نظر زبان و پلتفرم خنثی است که در گوگل توسعه یافته است. این به شما امکان می دهد یک سرویس را با استفاده از Protocol Buffers، یک مجموعه ابزار و زبان سریال سازی باینری قدرتمند تعریف کنید. سپس به شما این امکان را می‌دهد که از تعریف سرویس خود به زبان‌های مختلف، کلاینت و سرور اصطلاحی ایجاد کنید.

در این کد لبه، شما یاد می گیرید که چگونه یک سرویس C# بسازید که یک API را با استفاده از چارچوب gRPC در معرض نمایش قرار دهد. شما با استفاده از یک کلاینت کنسول نوشته شده در سی شارپ که از توضیحات سرویس مشابه سرویس استفاده می کند، با این سرویس تعامل دارید.

چیزی که یاد خواهید گرفت

  • زبان بافر پروتکل.
  • نحوه پیاده سازی سرویس gRPC با استفاده از سی شارپ.
  • نحوه پیاده سازی کلاینت gRPC با استفاده از سی شارپ.
  • نحوه به روز رسانی سرویس gRPC

آنچه شما نیاز دارید

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه خود را با Google Cloud Platform چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. نمونه های gRPC C# را دانلود و بسازید

دانلود نمونه s

مخزن نمونه gRPC C# را به صورت یک فایل فشرده دانلود کرده و آن را استخراج کنید.

از طرف دیگر، می توانید مخزن git آن را شبیه سازی کنید.

git clone https://github.com/meteatamel/grpc-samples-dotnet.git

در هر صورت، باید یک پوشه grpc-samples-dotnet با محتویات زیر داشته باشید:

d056832ff4ce0c8f.png

راه حل را بسازید

پوشه برنامه نمونه حاوی GrpcSamples.sln ، یک راه حل ویژوال استودیو است. دوبار کلیک کنید تا راه حل در ویژوال استودیو باز شود. شما باید راه حلی را با تعدادی پروژه ببینید.

61da9ddc86c08019.png

در بخش بعدی پروژه ها را با جزئیات بیشتری بررسی خواهیم کرد، اما ابتدا اجازه دهید پروژه را بسازیم. برای ساخت راه حل 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

مراحل بعدی