Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah GRPC hanya menyokong bahasa Go? Meneroka dan menganalisis

Adakah GRPC hanya menyokong bahasa Go? Meneroka dan menganalisis

PHPz
PHPzasal
2024-03-28 15:07:02308semak imbas

GRPC 是否只支持 Go 语言?探究与解析

Adakah GRPC hanya menyokong bahasa Go? Penerokaan dan Analisis

GRPC (Panggilan Prosedur Jauh gRPC) ialah rangka kerja panggilan prosedur jauh merentas bahasa berprestasi tinggi, yang pada asalnya dibangunkan oleh Google dan digunakan secara meluas dalam komuniti sumber terbuka. Disebabkan kaedah penyiaran yang cekap dan prestasi penghantaran berdasarkan protokol HTTP/2, GRPC digunakan secara meluas dalam seni bina perkhidmatan mikro. Walau bagaimanapun, sesetengah orang salah faham bahawa GRPC hanya menyokong bahasa Go Di sini kita akan meneroka isu ini secara mendalam dan memberikan contoh kod tertentu.

Pertama sekali, perlu jelas bahawa GRPC tidak mengehadkan bahasa pengaturcaraan yang digunakan oleh pembangun Ia menyokong pelbagai bahasa pengaturcaraan, termasuk tetapi tidak terhad kepada Go, Java, Python, C++, dll. Dengan perkembangan pesat GRPC, komuniti juga terus berkembang, menyediakan sokongan untuk lebih banyak bahasa pengaturcaraan.

Apabila menggunakan GRPC, anda perlu menentukan fail .proto, yang mengandungi definisi antara muka dan format mesej perkhidmatan. Di bawah ini kami mengambil bahasa Go dan bahasa Python sebagai contoh untuk menunjukkan cara mentakrifkan perkhidmatan GRPC yang mudah.

Pertama ialah contoh bahasa Go:

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Kemudian, jana kod bahasa Go melalui alat protok:

protoc --go_out=plugins=grpc:. helloworld.proto

Seterusnya, tulis pelayan GRPC dan kod klien:

package main

import (
    "context"
    "log"
    "net"

    "google.golang.org/grpc"
    pb "path/to/proto"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    return &pb.HelloReply{Message: "Hello, " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", ":50051")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

Kemudian ialah contoh bahasa Python:

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
Begitu juga Jana kod Python melalui protoc:

python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto

Kemudian, tulis pelayan GRPC Python dan kod klien:

from concurrent import futures
import grpc
import helloworld_pb2_grpc as pb2_grpc
import helloworld_pb2 as pb2

class Greeter(pb2_grpc.GreeterServicer):

    def SayHello(self, request, context):
        return pb2.HelloReply(message='Hello, %s' % request.name)

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()

Seperti yang anda boleh lihat daripada contoh di atas, GRPC bukan sahaja menyokong bahasa Go, tetapi juga menyokong pelbagai bahasa pengaturcaraan lain. Hanya tentukan fail .proto, kemudian gunakan pemalam bahasa yang sepadan untuk menjana kod yang sepadan dan laksanakan pelayan dan klien GRPC dalam setiap bahasa.

Ringkasnya, GRPC bukan sahaja menyokong bahasa Go, tetapi rangka kerja panggilan prosedur jauh merentas bahasa yang boleh menyediakan perkhidmatan RPC berprestasi tinggi untuk aplikasi dalam bahasa yang berbeza. Kami menggalakkan pembangun untuk mencuba menggunakan GRPC dalam projek yang berbeza dan menggunakan ciri merentas bahasanya dengan lebih baik untuk membina sistem teragih dan seni bina perkhidmatan mikro dengan lebih baik.

Atas ialah kandungan terperinci Adakah GRPC hanya menyokong bahasa Go? Meneroka dan menganalisis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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