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