🧅 [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);
}
}
'프로그래밍 > C#_MagicOnion' 카테고리의 다른 글
[MagicOnion] Client Disconnect 사유 추가 (0) | 2024.11.07 |
---|---|
MagicOnion을 이용한 채팅 만들기 3 : 클라이언트 (0) | 2024.08.09 |
MagicOnion을 이용한 채팅 만들기 2 : Hub, Receiver (0) | 2024.08.09 |
MagicOnion을 이용한 채팅 만들기 1 : Server (0) | 2024.08.08 |
MagicOnion - 개요 (0) | 2024.08.08 |
댓글