Go (Golang) के लिए gRPC: लाइब्रेरीज़ और उदाहरण
gRPC, Google द्वारा विकसित एक उच्च-प्रदर्शन वाला रिमोट प्रोसीजर कॉल (RPC) फ्रेमवर्क है, जो HTTP/2 और Protocol Buffers (protobuf) पर आधारित है। Go भाषा के लिए आधिकारिक कार्यान्वयन grpc-go उपलब्ध है, जो द्विदिशात्मक स्ट्रीमिंग, TLS एन्क्रिप्शन और इंटरसेप्टर्स के साथ कुशल माइक्रोसर्विसेज़ बनाने की अनुमति देता है। इस लेख में आपको टूल्स का पूर्ण विवरण, सर्वर और क्लाइंट के उदाहरण, साथ ही व्यावहारिक सुझाव मिलेंगे।
Go में gRPC के लिए मुख्य लाइब्रेरीज़
- google.golang.org/grpc — Go के लिए मुख्य gRPC लाइब्रेरी। इसमें सर्वर और क्लाइंट भाग, स्ट्रीम, मेटाडेटा और लोड बैलेंसिंग का समर्थन शामिल है।
- google.golang.org/protobuf — protobuf संदेशों के साथ काम करने के लिए पैकेज: संकलन, सीरियलाइज़ेशन, डीसीरियलाइज़ेशन।
- github.com/golang/protobuf/protoc-gen-go —
protocकंपाइलर के लिए प्लगइन, जो.protoफ़ाइलों से Go कोड उत्पन्न करता है। - github.com/grpc-ecosystem/grpc-gateway — gRPC के ऊपर REST प्रॉक्सी बनाने के लिए उपयोगिता (ब्राउज़रों के साथ संगतता के लिए उपयोगी)।
इंस्टॉलेशन और सेटअप
काम शुरू करने से पहले protobuf कंपाइलर और प्लगइन्स इंस्टॉल करें:
# protoc इंस्टॉलेशन (Linux/macOS)sudo apt install protobuf-compiler # Ubuntu/Debianbrew install protobuf # macOS
# Go के लिए प्लगइन्स इंस्टॉलेशनgo install google.golang.org/protobuf/cmd/protoc-gen-go@latestgo install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latestइंस्टॉलेशन के बाद, $GOPATH/bin जोड़कर PATH अपडेट करें।
.proto फ़ाइल के माध्यम से सेवा परिभाषा
hello.proto फ़ाइल बनाएं:
syntax = "proto3";
package hello;
option go_package = "example.com/grpc-demo/hello";
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); rpc SayHelloStream (HelloRequest) returns (stream HelloReply);}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}कमांड से Go कोड उत्पन्न करें:
protoc --go_out=. --go-grpc_out=. hello.protoफ़ाइलें hello.pb.go (संदेश) और hello_grpc.pb.go (सेवा) दिखाई देंगी।
Go में सर्वर का उदाहरण
package main
import ( "log" "net"
pb "example.com/grpc-demo/hello" "google.golang.org/grpc")
type server struct { pb.UnimplementedGreeterServer}
func (s *server) SayHello(req *pb.HelloRequest, stream pb.Greeter_SayHelloServer) error { // सामान्य RPC return stream.Send(&pb.HelloReply{Message: "Hello, " + req.Name})}
func (s *server) SayHelloStream(req *pb.HelloRequest, stream pb.Greeter_SayHelloServer) error { // स्ट्रीमिंग उत्तर for i := 0; i < 5; i++ { if err := stream.Send(&pb.HelloReply{Message: "Hello " + req.Name + " #" + string(rune(i))}); err != nil { return err } } return nil}
func main() { lis, _ := net.Listen("tcp", ":50051") s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) log.Println("Server listening on :50051") if err := s.Serve(lis); err != nil { log.Fatalf("Failed to serve: %v", err) }}Go में क्लाइंट का उदाहरण
package main
import ( "context" "log" "time"
pb "example.com/grpc-demo/hello" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure")
func main() { conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close()
client := pb.NewGreeterClient(conn) ctx, ca