إنشاء خدمة gRPC باستخدام C#

1. نظرة عامة

gRPC هو إطار عمل ومجموعة أدوات لإجراءات الاتصال عن بُعد على نطاق محايد ومحايد في اللغة والنظام الأساسي تم تطويره في Google. تتيح لك هذه الأداة تعريف خدمة باستخدام Protocol Buffers، وهي مجموعة أدوات ولغة تسلسلية ثنائية فعّالة بشكل خاص. وتتيح لك هذه الأداة بعد ذلك إنشاء رموز برمجية أصلية للعميل والخادم من تعريف الخدمة الخاص بك إلى مجموعة متنوّعة من اللغات.

في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية إنشاء خدمة C# تُظهِر واجهة برمجة تطبيقات باستخدام إطار عمل gRPC. يمكنك التفاعل مع هذه الخدمة باستخدام برنامج وحدة تحكُّم مكتوب بلغة C# ويستخدم وصف الخدمة نفسه مثل الخدمة.

المعلومات التي ستطّلع عليها

  • لغة بروتوكول المخزن المؤقت.
  • كيفية تنفيذ خدمة gRPC باستخدام C#
  • كيفية تنفيذ برنامج gRPC باستخدام C#
  • كيفية تحديث خدمة gRPC

المتطلبات

كيف ستستخدم هذا البرنامج التعليمي؟

القراءة فقط اقرأها وأكمِل التمارين

ما هو تقييمك لتجربتك مع Google Cloud Platform؟

حديث متوسط بارع

2. تنزيل وإنشاء نماذج gRPC C#

تنزيل نماذج

نزِّل نموذج gRPC C# sample كملف ZIP ثم استخرِجه.

بدلاً من ذلك، يمكنك استنساخ مستودع git الخاص به.

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

في كلتا الحالتين، من المفترض أن يكون لديك مجلد grpc-samples-dotnet يتضمّن المحتوى التالي:

d056832ff4ce0c8f.png

وضع الحل

يحتوي نموذج مجلد التطبيق على GrpcSamples.sln، وهو أحد حلول Visual Studio. انقر مرّتين لفتح الحلّ في Visual Studio. من المفترض أن ترى حلاً مع عدد من المشاريع.

61da9ddc86c08019.png

سنستعرض المشروعات بمزيد من التفصيل في القسم التالي، ولكن أولاً، لنقم فقط بإنشاء المشروع. يمكنك الانتقال إلى Build > Build Solution أو Ctrl + Shift + B لإنشاء الحلّ. سيؤدي ذلك إلى تنزيل جميع التبعيات من NuGet ثم تجميع التطبيق.

في النهاية، من المفترَض أن تظهر رسالة Build succeeded في نتائج وحدة التحكّم في Visual Studio.

3- استكشاف نموذج Greeter

رسالة الترحيب هي نموذج بسيط من gRPC يرسل من خلاله العميل طلبًا باسم ويستجيب الخادم برسالة متبوعة بالاسم. يوجد مشروع ترحيب يتضمن تعريف الخدمة المشترك (ملف Proto) الذي يقوم عليه العميل والخادم.

مشروع مرحبًا

وهذا هو المشروع المشترك بين العميل والخادم. ويتضمّن السمة greeter.proto، وهو تعريف خدمة gRPC الذي يستخدمه العميل والخادم. يحدّد تعريف الخدمة خدمة gRPC تُسمى GreetingService، وتحتوي على طريقة greeting تتعامل مع HelloRequest كإدخال وHelloResponse كمخرجات.

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
}

وهي طريقة أحادية (أي بدون بث) يرسل فيها العميل طلبًا واحدًا ويحصل على استجابة واحدة من الخادم. يمكنك استكشاف باقي محتوى greeter.proto. يحتوي هذا المشروع أيضًا على نص برمجي يسمى generate_protos.bat يمكن استخدامه لإنشاء رموز كعب العميل والخادم من ملف Proto. يحتوي المشروع بالفعل على رموز بديلة للعميل والخادم، لذا لا داعي لإنشائها بنفسك. ومع ذلك، إذا غيرت شيئا عن ملف تعريف الخدمة، فستحتاج إلى تشغيل هذا البرنامج النصي لإعادة إنشاء رموز التلميحات.

خادم الترحيب

هذا هو مشروع خادم 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

أولاً، ابدأ تشغيل خادم الترحيب. افتح موجِّه أوامر، وانتقِل إلى مجلد bin > Debug في Greeter Server وشغِّل الملف التنفيذي. من المفترض أن يظهر الخادم يستمع إلى البيانات.

> 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 Server وشغِّل الملف التنفيذي. من المفترض أن يظهر لك العميل وهو يرسل الطلب ويتلقّى ردًا من الخادم.

> 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- تعديل نموذج رسالة الترحيب

لنرى كيف سيبدو تحديث الخدمة. أضِف طريقة جديدة إلى خدمة gRPC تُسمى التودع بدلاً من الترحيب بالعميل.

إنّ الخطوة الأولى هي تعديل ملف تعريف الخدمة greeter.proto..

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
    
    rpc goodbye(HelloRequest) returns (HelloResponse);
}

بعد ذلك، تحتاج إلى إعادة إنشاء رموز بديلة للعميل والخادم. في موجِّه أوامر، شغِّل "generate_protos.bat". بعد إنشاء الرموز البديلة، قد تحتاج إلى إعادة تحميل مشاريع Visual Studio للحصول على الرمز الجديد.

وأخيرًا، حدِّث رمز العميل والخادم للاستفادة من الطريقة الجديدة. في هذه الخدمة، عليك تعديل 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- استكشاف نموذج Chat

يتضمّن الحلّ أيضًا مشروعَين "ChatServer" و"ChatWindowsClient". وكما يوحي الاسم، هذا زوج من العميل والخادم لتطبيق دردشة بسيط. يحتوي مشروع واحد (Chat) على ملف تعريف الخدمة الذي يحمل اسم chat.proto. وهي تحدّد ChatService بطريقة chat.

service ChatService {
 rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}

المهم هنا هو أنّه يتم تمييز كل من رسائل المحادثة الواردة والصادرة بالكلمة الرئيسية stream. وهذا يحول الاتصال بشكل أساسي إلى بث ثنائي الاتجاه حيث يمكن للعميل والخادم إرسال رسائل إلى بعضهما البعض في أي وقت؛ فهو الحل الأمثل لتطبيق دردشة.

يمكنك استكشاف العيّنة بشكل أكبر، وإنشائها وتشغيلها لمعرفة كيف يعمل كتمرين.

7. تهانينا!

النقاط التي تناولناها

  • لغة مخزن البروتوكول المؤقت
  • كيفية تنفيذ خدمة gRPC باستخدام C#
  • كيفية تنفيذ برنامج gRPC باستخدام C#
  • كيفية تحديث خدمة gRPC

الخطوات التالية