>  기사  >  백엔드 개발  >  golang grpc를 배포하는 방법

golang grpc를 배포하는 방법

PHPz
PHPz원래의
2023-04-04 17:19:04656검색

최근 몇 년 동안 golang 언어는 점점 더 많은 개발자들에게 선호되고 있으며 Golang 언어의 경량화 및 높은 동시성 기능은 일부 대기업의 백엔드 서비스에서 널리 사용되고 있습니다. 마이크로서비스와 클라우드 네이티브 기술의 인기로 인해 서버 분야에서 golang의 사용이 늘어나고 있으며, golang의 rpc 프레임워크인 grpc도 널리 사용되고 있습니다.

이 글에서는 주로 grpc 배포에 대해 소개합니다. 배포하기 전에 golang과 grpc의 기본 개념을 이해해야 합니다.

1. golang의 기본 개념

golang은 Google에서 탄생한 정적 유형, 컴파일 및 동시 프로그래밍 언어입니다. golang 언어에는 이해해야 할 몇 가지 특별한 개념이 있습니다.

  1. goroutine: golang의 경량 스레드이며 높은 동시성을 달성하기 위한 주요 수단입니다.
  2. channel: goroutine 간의 통신에 사용되는 golang의 특수 데이터 유형입니다.
  3. select: golang의 멀티플렉싱 채널을 위한 키워드입니다.
  4. defer: golang에서 함수 실행을 지연하는 데 사용되는 키워드입니다.
  5. 인터페이스: golang에서 동작을 정의하는 방법입니다.

2. grpc의 기본 개념

grpc는 Google에서 개발하고 오픈소스로 제공하는 고성능 오픈소스 일반 RPC 프레임워크입니다. grpc는 golang, C++, Java 등을 포함한 여러 언어를 지원합니다. grpc의 특징은 다음과 같습니다.

  1. protobuf 및 json 등을 포함한 여러 직렬화 프로토콜을 지원합니다.
  2. http2 프로토콜을 기반으로 양방향 스트리밍, 흐름 제어, 헤더 압축과 같은 고급 기능을 지원합니다.
  3. 사용자 정의 인증, 로드 밸런싱 및 기타 확장을 지원합니다.

3. grpc 배포

기본 개념을 익힌 후 grpc 배포를 소개하겠습니다.

  1. Write grpc server code

간단한 grpc 서버 프로그램을 작성한다고 가정해 보겠습니다. 코드는 다음과 같습니다.

package main

import (
    "context"
    "fmt"
    "log"
    "net"

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

const (
    port = ":50051"
)

type server struct{}

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

func main() {
    lis, err := net.Listen("tcp", port)
    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)
    }
}
  1. Write grpc client code

간단한 grpc 클라이언트 프로그램을 작성한다고 가정해 보겠습니다.

package main

import (
    "context"
    "log"
    "os"
    "time"

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

const (
    address     = "localhost:50051"
    defaultName = "world"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := pb.NewGreeterClient(conn)

    name := defaultName
    if len(os.Args) > 1 {
        name = os.Args[1]
    }
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    defer cancel()
    r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
}
  1. 컴파일하여 바이너리 파일 생성

컴파일 명령은 다음과 같습니다.

$ go build -o greeter_server ./server/main.go
$ go build -o greeter_client ./client/main.go
  1. grpc 서버 프로그램을 실행합니다
$ ./greeter_server

실행 후 다음 출력이 표시됩니다.

2021/05/07 10:37:30 Listening on :50051
  1. grpc 클라이언트 프로그램을 실행하세요
$ ./greeter_client

실행 후 다음과 같은 출력이 표시됩니다.

2021/05/07 10:38:28 Greeting: Hello world

그 중 world가 기본 매개변수이며 다른 매개변수도 전달할 수 있습니다. 예:

$ ./greeter_client Tim

실행 후

2021/05/07 10:39:22 Greeting: Hello Tim

IV. 요약

이 기사에서는 주로 grpc 서버 프로그램 작성, grpc 클라이언트 프로그램 작성, 바이너리 파일 컴파일 및 생성, grpc 서버 및 클라이언트 프로그램 실행을 포함하여 grpc 배포에 대해 소개합니다. . golang 및 grpc에 대해 자세히 알아보려면 공식 문서 및 기타 관련 자료를 참조하세요.

위 내용은 golang grpc를 배포하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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