CodeBlanks Logo Icon CodeBlanks

gRPC sunucu

  • Go kursu
  • İleri seviye
  • Ders 40/68
  • 4 dk

gRPC sunucusu kurmayı ve servis kaydını öğrenirsin.

gRPC sunucusu

Sunucu, üretilen arayüzü karşılayan bir tür yazar, onu bir grpc.Server'a kaydeder ve bir TCP dinleyicisinde çalıştırır:

type sunucu struct {
    pb.UnimplementedSelamlayiciServer
}

func (sunucu) Selam(ctx context.Context, in *pb.SelamIstek) (*pb.SelamYanit, error) {
    return &pb.SelamYanit{Mesaj: "Merhaba " + in.GetAd()}, nil
}

lis, _ := net.Listen("tcp", ":50051")
s := grpc.NewServer()
pb.RegisterSelamlayiciServer(s, sunucu{})
s.Serve(lis)

Hata kodları

gRPC hataları HTTP kodu yerine kendi durum kodlarını taşır. status paketiyle anlamlı hata döndürülür:

if in.GetAd() == "" {
    return nil, status.Error(codes.InvalidArgument, "ad boş olamaz")
}

İstemci status.Code(err) ile kodu okur ve NotFound, Unauthenticated, DeadlineExceeded gibi durumlara göre davranır.

Uygulama Doğrulayan yöntem

Selam(ad string) (string, error) fonksiyonu yaz: ad boşsa errors.New("ad boş olamaz"), değilse "Merhaba " + ad döndürsün. Selam("") çağrısının hatasını yazdır.

Başlangıç kodu

main.go
package main

import (
    "errors"
    "fmt"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "errors"
    "fmt"
)

func Selam(ad string) (string, error) {
    if ad == "" {
        return "", errors.New("ad boş olamaz")
    }
    return "Merhaba " + ad, nil
}

func main() {
    _, err := Selam("")
    fmt.Println(err)
}

Beklenen çıktı

ad boş olamaz

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>UnimplementedSelamlayiciServer</code> neden gömülür?

  • Sunucuyu hızlandırmak için
  • TLS açmak için
  • Log tutmak için
  • Proto'ya yeni yöntem eklenince kod derlenmeye devam etsin diye Doğru cevap

Açıklama: Gömülü tür yazılmamış yöntemler için "Unimplemented" hatası döndüren varsayılanlar sağlar; ileri uyumluluk içindir.

2 Servisi kaydet

Soru
s := grpc.NewServer()
pb.____(s, sunucu{})
Cevap
s := grpc.NewServer()
pb.RegisterSelamlayiciServer(s, sunucu{})

Açıklama: Üretilen Register...Server fonksiyonu uygulamayı sunucuya bağlar.

3 Sunucu adımları

Kavram Anlamı
net.Listen Port açar
grpc.NewServer Sunucu oluşturur
Register...Server Servisi bağlar
s.Serve İstekleri dinler

İleri seviye bölümündeki tüm dersler