Wie wird die API in grpc implementiert?

王林
Freigeben: 2024-02-15 16:40:09
nach vorne
622 Leute haben es durchsucht

Wie wird die API in grpc implementiert?

Mit Hilfe des PHP-Editors Yuzai erkunden wir, wie die API in grpc implementiert wird. gRPC ist ein leistungsstarkes Open-Source-RPC-Framework (Remote Procedure Call), das Googles Protocol Buffers als Schnittstellenbeschreibungssprache verwendet und mehrere Programmiersprachen unterstützt. Der Kernmechanismus von gRPC basiert auf dem HTTP/2-Protokoll, das die Kommunikation zwischen dem Client und dem Server durch Serialisierung und Deserialisierung von Nachrichten implementiert. In diesem Artikel werfen wir einen genaueren Blick darauf, wie gRPC funktioniert, wie Nachrichten weitergeleitet werden und wie man damit leistungsstarke verteilte Anwendungen erstellt. Lasst uns beginnen!

Frageninhalt

Ich habe das offizielle Dokument https://grpc.io/docs/linguals/go/basics/ verwendet, aber nach der Implementierung ist ein Problem aufgetreten. Wenn ich den TCP-Server erstelle, muss ich den Host und den Port angeben (in meinem Fall mcrsrv-book:7561). Aber was ist, wenn ich eine andere API für grpc implementieren möchte? Muss ich einen anderen Server auf einem neuen Port starten (z. B. mcrsrv-book:7562)? Wie werden Routing und APIs in grpc implementiert?

Mein Servercode lautet:

type routeGuideServer struct {
    pb.UnimplementedRouteGuideServer
    savedFeatures []*pb.Response // read-only after initialized
}

// GetFeature returns the feature at the given point.
func (s *routeGuideServer) GetFeature(ctx context.Context, request *pb.Request) (*pb.Response, error) {

    context := localContext.LocalContext{}
    book := bookRepository.FindOrFailBook(context, int(request.BookId))

    return &pb.Response{
        Name:        book.Name,
        BookId:      int32(book.BookId),
        AuthorId:    int32(book.AuthorId),
        Category:    book.Category,
        Description: "Описание",
    }, nil
}

func newServer() *routeGuideServer {
    s := &routeGuideServer{}
    return s
}

func SomeAction() {
    lis, err := net.Listen("tcp", fmt.Sprintf("mcrsrv-book:7561"))
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    var opts []grpc.ServerOption
    grpcServer := grpc.NewServer(opts...)
    pb.RegisterRouteGuideServer(grpcServer, newServer())
    grpcServer.Serve(lis)
}
Nach dem Login kopieren

Ich denke, es sollte andere Optionen geben als das Öffnen separater Ports für jeden GRPC-Dienst.

Wie wird die API in grpc implementiert?

Problemumgehung

Wenn Sie dieselbe Adresse für verschiedene Dienste verwenden möchten, registrieren Sie einfach die anderen Dienste erneut, bevor Sie den grpc-Server starten.

grpcServer := grpc.NewServer(opts...)
pb.RegisterRouteGuideServer(grpcServer, newServer())

#register other server here with the same 'grpcServer'

grpcServer.Serve(lis)
Nach dem Login kopieren

Dieser Stackoverflow-Thread könnte Ihnen als Beispiel dafür dienen, was Sie erreichen möchten. Die Frage enthält einen Beispielcode, der meiner Meinung nach Ihren Anforderungen entspricht.

Zugriff auf mehrere GRPC-Dienste über dieselbe Verbindung

Das obige ist der detaillierte Inhalt vonWie wird die API in grpc implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage