>  기사  >  백엔드 개발  >  gRPC를 사용하여 Golang에서 기본 서버와 클라이언트를 구현하는 방법

gRPC를 사용하여 Golang에서 기본 서버와 클라이언트를 구현하는 방법

PHPz
PHPz원래의
2023-03-31 10:26:141909검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.