golang grpc를 배포하는 방법

PHPz
풀어 주다: 2023-04-04 17:23:00
원래의
577명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!