본문 바로가기
프로그래밍/C#_MagicOnion

[MagicOnion] StreamingHub, Filter

by 뽀도 2024. 7. 30.

🧅 [MagicOnion] StreamingHub, Filter


StreamingHub

- StreamingHub is a fully-typed realtime server <--> client communication framework.

- 스트리밍 허브는 완전히 타입화된 서버 <-> 클라이언트  실시간 통신 프레임워크다. 

 

- Using the StreamingHub real-time communication service, the server can broadcast data to multiple clients

- 스트리밍 허브는 실시간 커뮤니케이션 서비스를 사용한다, 그리고 서버는 다수의 클라이언트한테 데이터를 브로드캐스트 할 수 있다.


Filter 

- MagicOnion filter is powerful feature to hook before-after invoke. It is useful than gRPC server interceptor.

- 매직어니언 필터는 강력한 기능이다. 인보크 전 후로 후킹 가능한 , 이것은 gRPC의 서버의 인터셉터보다 유용하다.

- MagicOnion also provides an API for filters that is very similar to filter on ASP.NET Core MVC. These APIs support flexible filter implementations.

- 매직어니언은 또한 제공한다 필터 API를 제공한다. 이것은 ASP.NET CORE MVC와 매우 유사하다.

이러한 API는 유연한 구현을 제공한다.

 


Interface filter 설명

  • IMagicOnionServiceFilter interface
  • IStreamingHubFilter interface
  • IMagicOnionFilterFactory<T> interface
  • IMagicOnionOrderedFilter interface

 

1. IMagicOnionServiceFilter 

 

- MagigOnion에서 단일 서비스 메서드 실행을 둘러싸는 필터

- Unary 서비스 메서드 호출 전후에 실행되는 코드를 정의할 수 있게 해줌 

ex) 로깅, 인증, 데이터 검증 등의 작업

ValueTask Invoke(ServiceContext context, Func<ServiceContext, ValueTask> next)

 

 

2. IStreamingHubFilter 

 

- 스트리밍 허브 메서드의 실행을 둘러싸는 필터 

- 스트리밍 허브 메서드 호출 전 후에 추가 작업을 수행 할 수 있음

ex) 실시간 데이터 검증, 로깅 

ValueTask Invoke(StreamingHubContext context, Func<StreamingHubContext, ValueTask> next)

 

3. IMagicOnionFilterFactory<T>

- 실행 가능한 필터 인스턴스를 생성할 수 있는 인터페이스 

- 다양한 필터를 동적으로 생성하고 관리 가능 

 

using MagicOnion.Server.Filters;
using System;
using System.Threading.Tasks;

// Custom filter that implements IMagicOnionServiceFilter
public class CustomServiceFilter : IMagicOnionServiceFilter
{
    public async ValueTask Invoke(ServiceContext context, Func<ServiceContext, ValueTask> next)
    {
        Console.WriteLine("Before service method execution");
        await next(context);
        Console.WriteLine("After service method execution");
    }
}

// Factory that creates instances of CustomServiceFilter
public class CustomServiceFilterFactory : IMagicOnionFilterFactory<CustomServiceFilter>
{
    public CustomServiceFilter CreateInstance(IServiceProvider serviceProvider)
    {
        // You can use the serviceProvider to resolve dependencies if needed
        return new CustomServiceFilter();
    }
}

 

 

4. IMagicOnionOrderedFilter 인터페이스 

- IMagicOnionOrderedFilter는 필터의 순서를 제공하는 인터페이스

- 필터가 여러 개 적용될 때, 필터의 실행 순서를 지정할 수 있어.

- Order: 필터의 실행 순서를 나타내는 정수 값

 

using MagicOnion.Server.Filters;
using System;
using System.Threading.Tasks;

// Custom ordered filter that implements IMagicOnionServiceFilter and IMagicOnionOrderedFilter
public class OrderedServiceFilter : IMagicOnionServiceFilter, IMagicOnionOrderedFilter
{
    public int Order { get; set; }

    public OrderedServiceFilter(int order)
    {
        Order = order;
    }

    public async ValueTask Invoke(ServiceContext context, Func<ServiceContext, ValueTask> next)
    {
        Console.WriteLine($"Before service method execution with order {Order}");
        await next(context);
        Console.WriteLine($"After service method execution with order {Order}");
    }
}

// Factory that creates instances of OrderedServiceFilter
public class OrderedServiceFilterFactory : IMagicOnionFilterFactory<OrderedServiceFilter>
{
    private readonly int _order;

    public OrderedServiceFilterFactory(int order)
    {
        _order = order;
    }

    public OrderedServiceFilter CreateInstance(IServiceProvider serviceProvider)
    {
        // You can use the serviceProvider to resolve dependencies if needed
        return new OrderedServiceFilter(_order);
    }
}

 

 

 

반응형

댓글