0Pricing
Go Academy · บทเรียน

การใช้งานบริการ gRPC แบบเอกภาคี

สร้างเซิร์ฟเวอร์และไคลเอนต์ด้วย grpc-go

การใช้งานบริการ gRPC แบบเอกภาคี เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ของไคลเอนต์จะนำกำหนดเวลาและการยกเลิกไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ควรส่งต่อบริบทนี้ไปยังการเรียกปลายทาง (ฐานข้อมูลหรือ RPC อื่น)

TLS สำหรับระบบจริง

แทนที่ข้อมูลรับรองที่ไม่ปลอดภัยด้วย TLS เมื่อใช้งานในระบบจริง:

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

UnimplementedServer

การฝัง pb.UnimplementedXxxServer จะจัดเตรียมการนำเมธอด RPC ทั้งหมดไปใช้งานแบบโครงร่าง ซึ่งส่งคืนสถานะ Unimplemented วิธีนี้ช่วยให้คอมไพล์เซิร์ฟเวอร์ได้เมื่อมีการเพิ่ม RPC ใหม่ลงใน proto ก่อนที่คุณจะนำ RPC เหล่านั้นไปใช้งาน

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 แบบเอกภาคี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การใช้งานบริการ gRPC แบบเอกภาคี”

สร้างเซิร์ฟเวอร์และไคลเอนต์ด้วย grpc-go คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การใช้งานบริการ gRPC แบบเอกภาคี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Protocol Buffers และไฟล์ .proto
  2. การใช้งานบริการ gRPC แบบเอกภาคี
  3. การสตรีมฝั่งเซิร์ฟเวอร์และไคลเอนต์
  4. อินเตอร์เซปเตอร์และข้อมูลเมทาดาทาของ gRPC
← กลับไปที่ Go Academy