>  기사  >  백엔드 개발  >  단일 연결로 여러 gRPC 서비스에 액세스할 수 있나요?

단일 연결로 여러 gRPC 서비스에 액세스할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-11-03 03:42:31162검색

Can I Access Multiple gRPC Services with a Single Connection?

여러 gRPC 서비스에 동시에 액세스

문제:

여러 gRPC 서비스가 있는 서버에서 단일 포트에서 사용할 수 있는데 클라이언트에서 전화를 걸 때 각 서비스에 대해 별도의 연결을 설정해야 하는 이유는 무엇입니까?

<code class="go">func NewSubscriber() (c SubscriberRPC, err error) {
    c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c.client = pb.NewSubscriberServiceClient(c.conn)
    return
}

func NewDropper() (c DropperRPC, err error) {
    c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c.client = pb.NewDropperServiceClient(c.conn)
    return
}</code>

해결 방법:

초기 설정과 반대 가정하면, 동일한 서버의 여러 gRPC 서비스에 단일 연결로 액세스할 수 있습니다. 이는 하나의 grpc.ClientConn을 생성하고 이를 여러 pb.New*Client 함수에 전달하여 달성할 수 있습니다.

<code class="go">func main() {
    cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c1 := pb.NewSubscriberServiceClient(cc)
    c2 := pb.NewDropperServiceClient(cc)
}</code>

인터페이스 사용:

클라이언트 사용자 정의 -pb.go 파일에서 제공되는 생성된 코드를 이용하여 사이드 체험이 가능합니다. 그러나 생성된 코드는 이미 필요한 모든 RPC 기능을 처리합니다.

편의를 위해 여러 서비스를 단일 구조체로 결합할 수 있습니다.

<code class="go">type SubscriberDropper struct {
    pb.SubscriberServiceClient
    pb.DropperServiceClient
}

func main() {
    // ... as above ...
    sd := &SubscriberDropper{c1, c2}
}</code>

위 내용은 단일 연결로 여러 gRPC 서비스에 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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