0Pricing
Go Academy · درس

تنفيذ خدمة gRPC أحادية الاتجاه

خادم وعميل باستخدام grpc-go

تنفيذ خدمة gRPC أحادية الاتجاه درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما هو RPC أحادي؟

إن RPC الأحادي هو أبسط أنماط gRPC: يرسل العميل طلبًا واحدًا ويتلقى استجابة واحدة، على نحو يشبه استدعاء دالة عادية عبر الشبكة.

تنفيذ الخادم

نفّذوا الواجهة المُنشأة. أدرجوا البنية Unimplemented*Server للتوافق مع الإصدارات المستقبلية:

type userServer struct {
    pb.UnimplementedUserServiceServer
    db *sql.DB
}

func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
    // query DB
    return &pb.User{Id: req.Id, Name: "Alice"}, nil
}

بدء تشغيل الخادم

أنشئوا خادم gRPC، وسجّلوا التنفيذ، واستمعوا على منفذ TCP:

lis, _ := net.Listen("tcp", ":50051")
grpcSrv := grpc.NewServer()
pb.RegisterUserServiceServer(grpcSrv, &userServer{})
log.Fatal(grpcSrv.Serve(lis))

اتصال العميل

اتصلوا بالخادم وأنشئوا كعب العميل:

conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { log.Fatal(err) }
defer conn.Close()
client := pb.NewUserServiceClient(conn)

إجراء استدعاء أحادي

استدعوا طريقة RPC على كعب العميل كما لو كانت دالة محلية:

ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: 42})
if err != nil { log.Fatalf("error: %v", err) }
fmt.Println(user.Name)

معالجة الأخطاء

يستخدم gRPC رموز الحالة. أعيدوا الأخطاء باستخدام status.Errorf وتحققوا منها باستخدام status.Code(err):

import "google.golang.org/grpc/status"
import "google.golang.org/grpc/codes"

// Server:
return nil, status.Errorf(codes.NotFound, "user %d not found", req.Id)
// Client:
if status.Code(err) == codes.NotFound { /* handle */ }

تمرير السياق

ينقل السياق المُمرَّر إلى استدعاء RPC الخاص بالعميل المواعيد النهائية والإلغاء إلى الخادم. وينبغي للخادم تمريره إلى الاستدعاءات التابعة (قاعدة البيانات وRPCs الأخرى).

TLS في بيئة الإنتاج

استبدلوا بيانات الاعتماد غير الآمنة بـ TLS في بيئة الإنتاج:

creds, _ := credentials.NewServerTLSFromFile("cert.pem", "key.pem")
grpcSrv := grpc.NewServer(grpc.Creds(creds))

UnimplementedServer

يوفّر تضمين pb.UnimplementedXxxServer تطبيقات هيكلية لجميع طرق RPC تُرجع حالة Unimplemented. ويضمن ذلك نجاح ترجمة الخادم عند إضافة RPCs جديدة إلى proto قبل تنفيذها.

grpc.Dial مقابل grpc.NewClient

أصبح grpc.Dial مهجورًا في الإصدارات الأحدث. استخدموا grpc.NewClient، الذي لا ينشئ اتصالًا بشكل فوري، بل ينشئه عند الحاجة عند أول استدعاء RPC.

خدمة الانعكاس

سجّلوا خدمة انعكاس gRPC للسماح لأدوات مثل grpcurl بفحص الخدمات المتاحة دون ملف .proto:

reflection.Register(grpcSrv)

اختبار سريع

ما الغرض من تضمين pb.UnimplementedXxxServer في بنية خادم gRPC؟

مراجعة: gRPC الأحادي

النقاط الأساسية:

  • نفّذوا الواجهة المُنشأة، وأدرجوا UnimplementedServer
  • استخدموا grpc.NewServer() + Register + Serve على مستمع TCP
  • العميل: grpc.NewClient + NewXxxClient المُنشأة
  • استخدموا status.Errorf/status.Code لمعالجة أخطاء gRPC

الأسئلة الشائعة

هل درس «تنفيذ خدمة gRPC أحادية الاتجاه» مجاني؟

نعم — نص درس «تنفيذ خدمة gRPC أحادية الاتجاه» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «تنفيذ خدمة gRPC أحادية الاتجاه»؟

خادم وعميل باستخدام grpc-go تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تنفيذ خدمة gRPC أحادية الاتجاه»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Protocol Buffers وملفات .proto
  2. تنفيذ خدمة gRPC أحادية الاتجاه
  3. البث من الخادم والعميل
  4. معترضات gRPC والبيانات الوصفية
← العودة إلى Go Academy