2011-11-23 3 views
7

두 시스템을 연결하는 좋은 방법을 찾고 있는데, 1) Ubuntu에서 실행중인 Qt 기반 응용 프로그램과 2) 다른 Ubuntu 컴퓨터에서 실행중인 Boost 기반 응용 프로그램. 두 응용 프로그램 모두 공용 인터페이스 코드를 입력 할 공용 라이브러리를 사용합니다. RPC 유형 인터페이스를 사용하고 싶습니다. CORBA와 D-Bus를 살펴 봤지만 다른 사람들이 사용했거나 추천할만한 것이 궁금합니다.Qt 및 Boost RPC

미리 감사드립니다.

답변

4

Apache Thrift은 원래 Facebook에서 개발 한 언어 간 RPC 프레임 워크입니다. 내가 오래 전에 사용한 프로토 타입은 사용하기가 매우 간단하다고 생각합니다 (어떤 문제도 기억하지 못합니다). 나중에 다른 언어로 작성된 구성 요소로 시스템을 확장하려는 경우 좋은 선택입니다.

0

인터넷 통신 엔진 (Ice)은 많은 언어를 지원하는 최신의 최신 RPC 메커니즘입니다. here을 다운로드 할 수 있습니다. Ice API의 대부분은 Ice의 사양 언어 인 Slice로 정의됩니다.

Slice (Ice Specification Language)는 객체 인터페이스를 구현에서 분리하는 기본 추상화 메커니즘입니다. Slice는 응용 프로그램에서 사용하는 유형 및 객체 인터페이스를 설명하는 클라이언트와 서버 사이의 계약을 수립합니다. 이 설명은 구현 언어와 독립적이므로 클라이언트가 서버와 동일한 언어로 작성되었는지 여부는 중요하지 않습니다.

슬라이스 정의는 C++와 같은 컴파일러에 의해 특정 구현 언어에 대해 컴파일됩니다.

XML-RPC를 사용할 수도 있습니다. 가볍고 사용하기 쉬운 RPC 메커니즘입니다. 그것을 얻을 수있다 here.

2

ØMQ을 고려해 볼 수 있습니다. 다른 많은 것들 중에서 "자동으로"연결 문제 (실패의 경우 재 연결 포함)를 처리하는 크로스 플랫폼 메시징 라이브러리입니다. 여러 언어로 된 바인딩이 있으며 czmq 라이브러리는 많은 일반적인 ØMQ 사용을위한 훌륭한 고급 C 인터페이스를 제공합니다.

RPC 프레임 워크에 대해 요청 - 응답 패턴을 쉽게 사용할 수 있지만 guide을 읽을 때 다른 패턴이 더 적합하다는 것을 알 수 있습니다.

ØMQ를 기반으로 만들어진 RPC framework을 찾았지만 분명히 C++을 사용하고 있으므로 학습 목적 이외의 다른 방법으로는 도움이되지 않습니다. this question을 참조하십시오. 당신이 원한다면 당신은 아마도 당신 자신의 것을 쉽게 굴릴 수 있습니다.

ØMQ의 라이센스는 기본적으로 정적 연결 예외가있는 LGPL 인 "LGPLv3 +"입니다. czmq이 MPLv2로 이동하고 있으므로 ØMQ가 곧 적용될 것이라는 사실에 놀라지 않을 것입니다. ØMQ 작성자의 메시지에 따르면 MPLv2는 "LGPLv3 +"라이센스와 매우 유사하지만 엔터프라이즈 변호사가 더 수용 할 수 있습니다.

인터페이스 코드로 boost serialization을 고려할 수도 있습니다. 우리는 부스트 직렬화와 함께 czmq (자동 노드 발견을위한 zbeacon 포함)를 사용했으며, 매우 잘 작동합니다. 과거에 XML-RPC을 사용했으며, 나는 그것이 제공하는 연결 처리 기능에 대해 ØMQ를 선호합니다.