alkee-allm / k2proto

grpc service sample
6 stars 2 forks source link

Grpc 의 channel 과 client(stub)를 재사용하도록 #30

Closed alkee-allm closed 4 years ago

alkee-allm commented 4 years ago

생성-삭제 overhead 가 있고, channel 과 stub 는 thread-safe 하므로 재사용이 가능. 가능하다면 재사용할 수 있도록

alkee-allm commented 4 years ago

(참고)

alkee-allm commented 4 years ago

https://github.com/alkee-allm/k2proto/blob/aef98571d467de72e062d7ede4ed73a2d76b8f2d/K2svc/Frontend/Session.cs#L40-L46

session helper IsOnline 함수의 경우 static 함수이기 때문에, service singleton 을 사용할 수 없다. client manager(channel, client pool)를 parameter 로 전달해야하는데, 좋아 보이지 않는다. 이 함수 단독으로 사용하는 별도의 manager 를 static 으로 만들어 사용할 것.

        private static Net.GrpcClients clients = new Net.GrpcClients();
        internal static async Task<bool> IsOnline(string userId, string pushBackendAddress, Metadata backendHeader)
        {
            var client = clients.GetClient<SessionHost.SessionHostClient>(pushBackendAddress); // 연결되어있는 서버(Host)에 직접 호출
            var response = await client.IsOnlineAsync(new IsOnlineRequest { UserId = userId }, backendHeader);
            return response.Result == IsOnlineResponse.Types.ResultType.Online;
        }