Flutter의 GRPC 성능

Firebase Performance Monitoring 앱 성능 모니터링을 시작하는 빠르고 쉬운 방법입니다. HTTP(S) 요청을 포함하여 다양한 측정항목을 자동으로 모니터링하여 서버측 측정항목을 보완하고 앱 사용자의 실제 감정을 이해하는 좋은 방법입니다.

GRPC를 사용하여 Flutter 앱에서 요청을 하는 경우 이러한 마법이 자동으로 시작되지 않습니다. 대신 빠른 인터셉터를 사용하여 GRPC 요청의 성능을 측정하고 Firebase에 보고할 수 있습니다.
lib/performance_interceptor.dart
import 'package:firebase_performance/firebase_performance.dart';
import 'package:grpc/grpc.dart';

class PerformanceInterceptor implements ClientInterceptor {
  FirebasePerformance _performance = FirebasePerformance.instance;
  Map<String, String> attributes;

  PerformanceInterceptor([this.attributes = const {}]);

  @override
  ResponseFuture<R> interceptUnary<Q, R>(ClientMethod<Q, R> method, Q request,
      CallOptions options, ClientUnaryInvoker<Q, R> invoker) {
    Trace metric = _performance.newTrace(method.path);
    metric.start();
    this.attributes.forEach((key, value) => metric.putAttribute(key, value));

    ResponseFuture<R> resp = invoker(method, request, options);
    resp.then((_) {
      metric.stop();
    });
    return resp;
  }

  @override
  ResponseStream<R> interceptStreaming<Q, R>(
      ClientMethod<Q, R> method,
      Stream<Q> requests,
      CallOptions options,
      ClientStreamingInvoker<Q, R> invoker) {
    return invoker(method, requests, options);
  }
}


이 클래스는 사용하기 매우 간단합니다. GRPC 클라이언트를 구성할 때 옵션 및 채널과 함께 전달하기만 하면 됩니다.

import 'performance_interceptor.dart';

...

client = GreeterClient(
  channel,
  interceptors: [
    PerformanceInterceptor()
  ],
);


각 요청과 함께 전달되어야 하는 속성(차원)을 전달할 수도 있습니다. 연결하려는 서버를 통과하고 싶습니다.

client = GreeterClient(
  channel,
  interceptors: [
    PerformanceInterceptor({'host': hostname})
  ],
);


프레스토 악장! 이제 모든 간단한 GRPC 요청에 대한 성능 메트릭을 얻었습니다!

좋은 웹페이지 즐겨찾기