2009-12-01 2 views
3

현재 프로젝트에서 약간 분산 된 아키텍처가 있습니다. 즉, 여러 실행 파일이 서로 협력하여 작업을 완료합니다. 일을 더 쉽게하기 위해서, 나는 믿을만한 'backbone'메시지 버스를 가질 수 있기를 바란다 : 실행 파일이 msg 버스에 연결될 때, 새로운 msg가 도착하면 콜백을받을 수있다. 마찬가지로 버스에 새 메시지를 게시 할 수 있습니다.C++에서 opensource 고성능 IPC와 유사한 msg bus 라이브러리가 있습니까?

일부 회사는 이와 같은 기성품을 제공하지만, OSS에는 무료 제품이 있습니까?

+0

어떤 환경과 유스 케이스가 그럴까요? 그리고 * 약간 분산 된 것은 무엇을 의미합니까? –

+0

기본적으로 2 exe, 하나는 데이터 게시자, 다른 하나는 수신기입니다. 그러나 좀 더 복잡하게 만드는 이유는 수신기 내부에 msg 버스가 있어야하므로 한 객체가 다른 객체에 데이터/신호를 게시 할 수 있기 때문입니다. 두 개의 유스 케이스를 사용하는 대신 두 개의 유스 케이스 모두에 하나의 단일 메시지 버스를 사용하는 것을 선호합니다. –

답변

3

RabbitMQ과 같은 AMQP를 사용하는 것에 대해 생각해 봤습니까?

Cbinding에 대한 라이브러리가 있으며 C++의 "드레스 업"이 가능합니다.

RabbitMQ는 완전하고 신흥 AMQP 표준을 기반으로 높은 안정적인 엔터프라이즈 메시징 시스템 입니다. 이 패키지는 오픈 소스 Mozilla Public License로 라이센스되고 은 플랫폼 중립적 인 배포판 ( 에 플랫폼 별 패키지 포함)과 번들 (쉬운 설치용)이 있습니다. 물론


, 당신이 뭔가를 필요한 경우 "덜 분산"당신은 DBUS를 사용하여 바로 갈 수있다.

4

Windows 지원이 필요하지 않고 프로세스가 다른 컴퓨터에 분산되어 있지 않다면 나는 확실히 D-Bus을 보겠습니다.

이것은 "Qt, GLib, Java, C#, Python 등"의 C 및 기능 (웹 페이지에 따라) 바인딩으로 작성되었습니다.

list of projects using D-Bus도 상당히 인상적입니다.

+0

D-Bus를 고성능으로 기억하지 않습니까? 아니면 작년에 크게 바뀌 었습니까? –

+0

WinDbus, Windows 포트가 뒤쳐져있는 것 같습니다. 내 개발에서 D-Bus를 통합하려고 시도한 적이 없었습니다. –

1

주어진 답변 외에도 Boost.Interprocess은 휴대 가능하고 효율적인 대안이어야합니다.
고성능을 원한다면 프로세스 내 통신을 위해 IPC 라이브러리를 사용하는 아이디어를 폐기하십시오. 성능 저하가있을 것입니다.

+0

공유 메모리를 사용하여 폐기 하시겠습니까? –

+0

프로세스 내 통신, 공유 메모리 또는 다른 IPC 메커니즘이 필요하지 않았습니다. –

0

위의 AMQP 아이디어와 유사하게 ZeroMQ (http://www.zeromq.org/)를 볼 수 있습니다. 나는 그것을 개인적으로 사용하지 않았지만 나는 그것을 많이 좋아하는 사람들을 알고있다.

관련 문제