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
package main
import (
"errors"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
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
s := grpc.NewServer()
pb.____(s, sunucu{})
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 |