在php小編魚仔的幫助下,我們來探究grpc中的api是如何實現的。 gRPC是一個高效能、開源的遠端過程呼叫(RPC)框架,它使用了Google的Protocol Buffers作為介面描述語言,並支援多種程式語言。 gRPC的核心機制是基於HTTP/2協議,透過序列化和反序列化訊息來實現客戶端和伺服器之間的通訊。在本文中,我們將深入了解gRPC的工作原理、訊息傳遞方式以及如何使用它來建立強大的分散式應用程式。讓我們開始吧!
我使用了官方文件https://grpc.io/docs/languages/go/basics/,但實現後,出現了問題。 當我建立 tcp 伺服器時,我必須指定主機和連接埠(在我的例子中為 mcrsrv-book:7561)。 但是如果我想為 grpc 實作另一個 api 該怎麼辦?我是否需要在新連接埠上啟動另一台伺服器(例如 mcrsrv-book:7562)? grpc中的路由和api是如何實現的?
我的伺服器程式碼是:
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) }
我認為除了為每個 grpc 服務打開單獨的連接埠之外,還應該有其他選擇。
grpc中的api是如何實現的?
如果您想將相同位址用於不同的服務,只需在啟動 grpc 伺服器之前重新註冊其他服務即可。
grpcServer := grpc.NewServer(opts...) pb.RegisterRouteGuideServer(grpcServer, newServer()) #register other server here with the same 'grpcServer' grpcServer.Serve(lis)
這個 stackoverflow 執行緒可能會幫助您作為您想要實現的目標的範例。該問題提供了一個範例程式碼,我認為該程式碼與您的要求相符。
以上是grpc中的api是如何實現的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!