gRPC는 언어와 플랫폼 전반에 걸쳐 RPC 호출에 적합한 고성능 오픈 소스 범용 원격 프로시저 호출 프레임워크입니다. 데이터 전송을 위해 Google에서 개발한 protobuf 프로토콜을 사용하며 서버와 클라이언트 간의 통신을 빠르게 실현할 수 있으며 풍부한 기능과 확장성을 제공합니다. 이 기사에서는 gRPC를 사용하여 Golang에서 기본 서버와 클라이언트를 구현하는 방법을 소개합니다.
1. gRPC 설치
시작하기 전에 먼저 다음 명령을 사용할 수 있습니다.
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/protoc-gen-go
2. protobuf 파일을 생성합니다. 파일은 전송할 데이터와 호출할 메서드를 정의합니다. 이 예에서는 Greeting.proto라는 파일을 만들었습니다.
syntax = "proto3"; package greet; service GreetService { rpc SayHello (HelloRequest) returns (HelloResponse) {} } message HelloRequest { string name = 1; } message HelloResponse { string message = 1; }
3. 코드 생성
protobuf 파일을 통해 gRPC 관련 코드를 생성합니다. 다음 명령을 실행하세요:
$ protoc -I greet/ greet/greet.proto --go_out=plugins=grpc:greet
생성된 코드는 Greeting 디렉터리에 저장됩니다.
4. 서버측 구현
서버측 구현에서는 proto 파일에 정의된 서비스 인터페이스를 구현해야 합니다. 다음 단계를 통해 서버 측 코드 구현을 완료할 수 있습니다.
gRPC 서버 만들기package main import ( "context" "log" "net" "google.golang.org/grpc" pb "path/to/greet" ) type server struct {} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) { return &pb.HelloResponse{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.RegisterGreetServiceServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
5. 클라이언트 구현
클라이언트 구현은 비교적 간단합니다. 해당 서버에 연결하고 클라이언트를 인스턴스화하기만 하면 서버에서 제공하는 메서드를 호출할 수 있습니다. 클라이언트 코드 구현에서는 먼저 gRPC 통신을 위한 연결을 만든 다음 해당 연결을 사용하여 클라이언트를 만들고 인터페이스 메서드를 호출해야 합니다.
클라이언트 코드 구현은 다음과 같습니다.
package main import ( "log" "os" "context" "google.golang.org/grpc" pb "path/to/greet" ) func main() { address := "localhost:50051" if len(os.Args) > 1 { address = os.Args[1] } conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { log.Fatalf("couldn't connect: %v", err) } defer conn.Close() c := pb.NewGreetServiceClient(conn) name := "world" if len(os.Args) > 2 { name = os.Args[2] } r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("error: %v", err) } log.Printf("Greeting: %s", r.Message) }
6. 테스트
서버와 클라이언트 코드를 구현했으니 이제 서버를 실행한 후 클라이언트를 시작하여 테스트해보겠습니다.
$ go run greet_server.go
서버 실행 후 터미널을 열고 클라이언트를 실행하여 테스트합니다.
$ go run greet_client.go Greeting: Hello world
7. 요약
이 글에서는 gRPC를 사용하여 Golang에서 기본 서버와 클라이언트를 구현하는 방법을 소개합니다. gRPC는 강력한 인코딩 및 디코딩 기능을 제공하는 동시에 JSON 및 프로토콜 버퍼 데이터를 포함한 여러 전송 형식을 지원하므로 다양한 유형의 애플리케이션에 적합합니다. 예를 들어 분산 시스템, 대규모 웹 애플리케이션 및 게임 등이 있습니다. gRPC에 대해 자세히 알아보려면 공식 문서를 확인하세요.
위 내용은 gRPC를 사용하여 Golang에서 기본 서버와 클라이언트를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!