2013-10-23 3 views
1

저는 구성 요소 기반 게임의 백엔드 역할을하는 C++로 자체 메시지 버스를 설계하고 있습니다. 메시지 버스의 특성은 다음과 같습니다.메시지 버스에 가장 적합한 컨테이너

  • 첫 번째 요소에서 시작하여 마지막 요소까지 자주 반복됩니다. 임의의 위치에서 요소의
  • 드문 제거
  • 요소를 이론적으로 무제한
  • 요구는
  • 모든 요소가 메시지 처리기에 대한 포인터를 포함합니다 가능한 한 빨리 실행하는 메시지 유형의
  • 이론적으로 무제한
  • 스레드 안전

내 질문은 :

이러한 정보를 저장하는 데 가장 적합한 컨테이너는 무엇입니까? 이것은 표준 C++에만 국한되지 않으므로 컨테이너가 Windows와 Linux 사이의 크로스 플랫폼 인 한 부스트 컨테이너가 적용 가능합니다.

+0

뭔가 안전한 스레드입니다. –

+0

임의의 위치에서 요소 제거가 자주 발생하지 않는 경우 - 무작위를 의미하지만 배열 인덱스 임의대로 검색되었거나 임의적으로 검색 되었습니까? – Sarien

+0

@sarien 개체는 주어진 시간에 특정 메시지의 수신을 거부 할 수 있습니다. – OMGtechy

답변

0

메시지 버스는 복잡한 것이고 버스에 연결된 단일 구성 요소의 메시지 대기열 표현을 간과하지 않습니다.
주석에서 언급했듯이 std::queue<MessageType,std::list<MessageType> >은 스레드 안전성 외에도 주요 사용 사례를 충족해야하지만 고려해야 할 사항이 많습니다.

여기 스레드 안전 큐 구현을위한 샘플입니다 : STTCL에서 EventQueue.h. std::queue<__T__,std::list<__T__> >STTCL_DEFAULT_DEQUEIMPL(__T__) 값을 입력하면 해당 항목에 대해 find() 조작을 포함하여 사용자 요구에 맞아야합니다.

응용 프로그램의 사용 사례에 따라 특정 유형의 메시지에 대한 배포 및 구독을위한 다양한 메시징 패턴 중에서 선택해야합니다.
이 주제를 다루려고 할 때 EAI catalog of messaging patterns이 매우 유용하다는 것을 알았습니다. 이 외에도

: 항상 (항상! 느낌표!) 출발 전송에서 메시지 페이로드!

메시징 패턴을위한 주목할만한 전송 시스템은 다양한 언어에 대한 바인딩을 제공하는 0MQ입니다.그러나 다른 것들은 C++ 구현 (원시 소켓 기반 구현 또는 boost::asio과 같은 sthth 포함)에서 사용할 수 있습니다.

메시지 페이로드 디자인에 관해서는 Google Protocol Buffers이 분산 시스템 (임베디드 포함)의 모든 요구 사항에 가장 유용하고, 이식 가능하며 유연합니다.

+0

이 부분 중 일부는 저를 넘어서는 것으로 보입니다. 나는 많은 독서를해야합니다! 고마워요 :) – OMGtechy

1

표준 : : 목록

  • O (1) 반복
  • O (1) 제거 (가정, 당신은 반복자)
  • O (1) 삽입

목록의 주된 단점은 임의 액세스가 부족하다는 점입니다. 그러나 메시지 대기열과 관련이 없습니다.

+0

"반복자가 있다고 가정"한다는 것은 무엇을 의미합니까? – OMGtechy

+0

제거 할 요소를 가리키는 반복자. ('list.erase (it)') – structinf

+0

이 가정은 (반드시) 올바르지 않습니다. 요소는 목록에있는 위치를 모른 채 즉시 제거를 요청할 수 있습니다. – OMGtechy

관련 문제