0Pricing
Go Academy · Lekcja

Implementowanie jednożądaniowej usługi gRPC

Serwer i klient z użyciem grpc-go

Implementowanie jednożądaniowej usługi gRPC to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Czym jest unary RPC?

Unary RPC to najprostszy wzorzec gRPC: klient wysyła jedno żądanie i otrzymuje jedną odpowiedź, podobnie jak w przypadku zwykłego wywołania funkcji przez sieć.

Implementacja serwera

Należy zaimplementować wygenerowany interfejs. Należy osadzić strukturę Unimplemented*Server, aby zapewnić zgodność z przyszłymi wersjami:

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
}

Uruchamianie serwera

Należy utworzyć serwer gRPC, zarejestrować implementację i nasłuchiwać na porcie TCP:

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

Połączenie klienta

Należy połączyć się z serwerem i utworzyć stub klienta:

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

Wykonywanie wywołania unary

Metodę RPC należy wywołać na stubie klienta tak, jakby była funkcją lokalną:

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)

Obsługa błędów

gRPC używa kodów statusu. Błędy należy zwracać za pomocą status.Errorf i sprawdzać za pomocą 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 */ }

Przekazywanie kontekstu

Kontekst przekazany do wywołania RPC klienta przenosi do serwera informacje o limitach czasu i anulowaniu. Serwer powinien przekazywać go do wywołań zależnych (bazy danych i innych RPC).

TLS w środowisku produkcyjnym

W środowisku produkcyjnym należy zastąpić niezabezpieczone dane uwierzytelniające protokołem TLS:

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

UnimplementedServer

Osadzenie pb.UnimplementedXxxServer udostępnia implementacje zastępcze wszystkich metod RPC, które zwracają status Unimplemented. Dzięki temu serwer można skompilować, gdy do proto zostaną dodane nowe RPC, zanim zostaną zaimplementowane.

grpc.Dial a grpc.NewClient

grpc.Dial jest przestarzałe w nowszych wersjach. Należy używać grpc.NewClient, które nie ustanawia połączenia od razu, lecz robi to leniwie przy pierwszym wywołaniu RPC.

Usługa reflection

Należy zarejestrować usługę reflection gRPC, aby umożliwić narzędziom takim jak grpcurl introspekcję dostępnych usług bez pliku .proto:

reflection.Register(grpcSrv)

Szybki test

Jaki jest cel osadzania pb.UnimplementedXxxServer w strukturze serwera gRPC?

Podsumowanie: unary gRPC

Najważniejsze informacje:

  • Należy zaimplementować wygenerowany interfejs i osadzić UnimplementedServer
  • grpc.NewServer() + Register + Serve na nasłuchującym porcie TCP
  • Klient: grpc.NewClient + wygenerowany NewXxxClient
  • Do obsługi błędów gRPC należy używać status.Errorf/status.Code

Często zadawane pytania

Czy lekcja „Implementowanie jednożądaniowej usługi gRPC” jest bezpłatna?

Tak — pełny tekst „Implementowanie jednożądaniowej usługi gRPC” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Implementowanie jednożądaniowej usługi gRPC”?

Serwer i klient z użyciem grpc-go Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Implementowanie jednożądaniowej usługi gRPC”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Protocol Buffers i pliki .proto
  2. Implementowanie jednożądaniowej usługi gRPC
  3. Strumieniowanie po stronie serwera i klienta
  4. Interceptory gRPC i metadane
← Powrót do Go Academy