[Tip,C#] 간단히 만들어보는 메시지 처리 구조 > IT Tip&Tech

본문 바로가기
사이트 내 전체검색


회원로그인

IT Tip&Tech

[Tip,C#] 간단히 만들어보는 메시지 처리 구조

페이지 정보

작성자 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일19-10-01 17:12 조회491회 댓글0건

본문

전체코드 : https://github.com/sysroad/Samples/tree/master/Patterns/Message%20Subscribes

 

메시지 구독 구조로 등장한지 꽤 된 개념입니다.

유니티도 기본적으로는 이런 처리 방식을 사용하는 것으로 보이고요.

(Subscriber 가 아니라 Listener 라는 표현을 쓰는군요)

메시지 발신자가 특정 수신자를 지정하여 메시지를 발송하는 것이 아니라

발신자는 그저 메시지를 처리 센터?로 발송하고 센터에서는 해당 메시지를 구독한 구독자에게 

메시지를 일괄 발송하는 형태입니다.

 

작성해본 샘플코드에서는 메시지의 인터페이스는 Google.Protobuf.IMessage 를 쓰고

(이건 요즘 json 이나 msgpack 버리고 protobuf 로 작업중이라 썼습니다.. 별다른 이윤없어요;;)

구독자에 대한 인터페이스는

public interface ISubscriber

{

    int ID { get; }

    void Dispatcher(IMessage message);

로 정의하고 몇가지 기본적인 코드를 작성해둔 추상클래스로 SubscriberBase 를 만들었습니다.

SubscriberBase 를 상속하고 유효한 ID 를 부여한 후 생성자 또는 초기화 메서드에서 

구독자 ID 등록과 메시지 구독을 해주면 됩니다.

class MySubscriber : SubscriberBase 

{

    public override int ID { get { return 100; } }

 

    public MySubscriber()

    {

        MessageManager.Instance.Register(ID, this);

 

        Subscribe("Testing", RecvTesting);

        Subscribe("Printing", RecvPrinting);

    }

}

 

메시지 처리 센터? 격인 MessageManager 는 Singleton 으로 만들고 내부에 다음과 같이

발신자 id 와 메시지를 묶은 객체를 담는 큐를 두어 처리하게 했습니다.

class InternalMessage

{

    internal int Sender { get; set; }

    internal IMessage Message { get; set; }

구독자는 메시지 구독을 위해 자신의 ID 를 먼저 등록하고 메시지에 대한 구독 요청을 해야합니다.

( 위에 적은 MySubscriber 처럼 .. )

 

발신자가 메시지를 발송하면 이 메시지는 큐에 담기게 되고 Event 를 Set() 하여

큐에 쌓인 메시지 처리가 진행되도록 합니다.

sendEvent.WaitOne();

 

while (MessageQ.TryDequeue(out var msg))

{

   ..... 

MessageManager.Start 를 호출하면 메시지 처리 프로세스가 작동하게 되고

MessageManager.Stop 을 호출하면 종료됩니다.

 

 

 

 

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.

IT Tip&Tech 목록

Total 127건 1 페이지
IT Tip&Tech 목록
번호 제목 글쓴이 날짜 조회
127 우클릭 context 메뉴에서 CMD 창 열기 / VSCode 열기 메뉴 추가 레지스트리 댓글1 첨부파일 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-21 86
126 Redmine 다음 메일 smtp 설정 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-19 86
125 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 2 댓글1 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-11 577
열람중 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-01 492
123 [Tip,C#] protobuf 메시지 정의 나누어 배포하기 (내용추가) 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-23 546
122 [Tip,C#] protobuf 메시지 정의 나누어 배포하기 댓글3 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-18 586
121 QT Creator, undefined symbol: FT_Get_Font_Format 오류 리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-08 645
120 배경 누끼 따주는 사이트 리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-27 349
119 [link] 메모리 관련 글 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-15 1926
118 마소가 Azure Sphere 라는걸 만들었데요. 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-17 3078
117 MTPutty 댓글2 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-16 3336
116 Visual Studio 툴바 아이콘들 사라질때 해결방법 인기글첨부파일 black_H 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-13 2675
115 openvpn 연결 후 1시간뒤 연결이 자동으로 끊긴다면 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-04 3524
114 openvpn ip 고정시키기 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-03 2575
113 openvpn id/pwd 로 접속하기 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-02 2247
게시물 검색

접속자집계

오늘
818
어제
1,097
최대
3,675
전체
708,329
회사소개 개인정보취급방침 서비스이용약관
Copyright © LittleCandle All rights reserved.
문의메일 : littlecandle99@gmail.com
상단으로
모바일 버전으로 보기