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

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


회원로그인

IT Tip&Tech

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

페이지 정보

작성자 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일19-10-01 17:12 조회3,581회 댓글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 138건 1 페이지
IT Tip&Tech 목록
번호 제목 글쓴이 날짜 조회
138 Grafana 세션 로그인 풀리는 문제 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-03 14
137 Phabricator 에서 gitlab repo 가져올 때 ca 인증 에러나는 경우 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-17 70
136 [JAVA]스프링 부트 1.4.2 이상에선 jar 파일로 빌드시 JSP안됩니다! 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 10-22 782
135 [arduino]Arduino UNO WiFi Rev2 에서 LiquidCrystal_I2C 사용할때 주의점 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 10-18 797
134 [JAVA]이클립스에서 자바스크립트 syntax coloring 이 되지 않을때 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 10-17 766
133 [유니티]Resources.Load 가 안되는 황당한 이유 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 10-10 706
132 아이폰에서 블루투스 키보드로 앱간전환하기 댓글1 인기글첨부파일 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 09-01 1040
131 [JAVA]전체경로에서 파일명 얻기 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 08-31 867
130 Visual Studio Code - Java 빌드 환경 설정 댓글1 인기글첨부파일 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-24 1243
129 [java] java 의 integer 비교 댓글1 인기글 리틀캔들 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 02-20 2514
128 Xbox 무선 어뎁터 드라이버 입니다. 댓글3 인기글첨부파일 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-14 2359
127 우클릭 context 메뉴에서 CMD 창 열기 / VSCode 열기 메뉴 추가 레지스트리 댓글1 인기글첨부파일 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-21 2876
126 Redmine 다음 메일 smtp 설정 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-19 3520
125 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 2 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-11 3526
열람중 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-01 3582
게시물 검색

접속자집계

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