Bagaimanakah API dalam grpc dilaksanakan?

王林
Lepaskan: 2024-02-15 16:40:09
ke hadapan
623 orang telah melayarinya

Bagaimanakah API dalam grpc dilaksanakan?

Dengan bantuan editor PHP Yuzai, mari kita terokai cara API dalam grpc dilaksanakan. gRPC ialah rangka kerja panggilan prosedur jauh (RPC) sumber terbuka berprestasi tinggi yang menggunakan Penampan Protokol Google sebagai bahasa penerangan antara muka dan menyokong berbilang bahasa pengaturcaraan. Mekanisme teras gRPC adalah berdasarkan protokol HTTP/2, yang melaksanakan komunikasi antara klien dan pelayan dengan mensiri dan menyahsiri mesej. Dalam artikel ini, kita akan melihat dengan lebih dekat cara gRPC berfungsi, cara mesej dihantar dan cara menggunakannya untuk membina aplikasi teragih yang berkuasa. Mari mulakan!

Kandungan soalan

Saya menggunakan dokumen rasmi https://grpc.io/docs/languages/go/basics/, tetapi selepas pelaksanaan, masalah berlaku. Apabila saya mencipta pelayan tcp saya perlu menentukan hos dan port (dalam kes saya mcrsrv-book:7561). Tetapi bagaimana jika saya mahu melaksanakan api lain untuk grpc? Adakah saya perlu memulakan pelayan lain pada port baharu (cth. mcrsrv-book:7562)? Bagaimanakah penghalaan dan API dilaksanakan dalam grpc?

Kod pelayan saya ialah:

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)
}
Salin selepas log masuk

Saya rasa perlu ada pilihan lain selain membuka port berasingan untuk setiap perkhidmatan grpc.

Bagaimanakah API dalam grpc dilaksanakan?

Penyelesaian

Jika anda ingin menggunakan alamat yang sama untuk perkhidmatan yang berbeza, hanya daftar semula perkhidmatan lain sebelum memulakan pelayan grpc.

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

#register other server here with the same 'grpcServer'

grpcServer.Serve(lis)
Salin selepas log masuk

Benang stackoverflow ini mungkin membantu anda sebagai contoh perkara yang ingin anda capai. Soalan itu menyediakan kod sampel yang saya percaya sepadan dengan keperluan anda.

Akses berbilang perkhidmatan grpc melalui sambungan yang sama

Atas ialah kandungan terperinci Bagaimanakah API dalam grpc dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan