2011-11-23 16 views
7

Szukam dobrego sposobu na połączenie dwóch systemów: 1) aplikacji opartej na Qt działającej na systemie Ubuntu i 2) aplikacji opartej na Boost działającej na innym komputerze z systemem Ubuntu. Obie aplikacje używają wspólnej biblioteki, w której wstawiłbym wspólny kod interfejsu. Chciałbym użyć interfejsu typu RPC. Spojrzałem na CORBĘ i D-Busa, ale zastanawiam się, co inni użyli lub poleciliby.Qt and Boost RPC

Z góry dziękuję.

Odpowiedz

4

Apache Thrift to międzyplatformowe środowisko RPC pierwotnie opracowane przez Facebook. Prototyp, który napisałem jakiś czas temu używał go, myślę, że był dość prosty w użyciu (nie pamiętam żadnych problemów). Byłby to dobry wybór, jeśli chcesz później rozszerzyć system o komponenty napisane w innych językach.

0

Mechanizm komunikacji internetowej (Ice) to nowoczesny i aktualny mechanizm RPC obsługujący wiele języków. Możesz go pobrać here. Wiele funkcji Ice API jest zdefiniowanych w Slice, który jest językiem specyfikacji dla Ice.

Plasterek (język specyfikacji dla lodu) jest podstawowym mechanizmem abstrakcji do oddzielania interfejsów obiektów od ich implementacji. Slice tworzy kontrakt między klientem a serwerem, który opisuje typy i interfejsy obiektowe używane przez aplikację. Opis ten jest niezależny od języka implementacji, więc nie ma znaczenia, czy klient jest napisany w tym samym języku co serwer.

Definicje plasterków są kompilowane dla określonego języka implementacji przez kompilator, na przykład dla C++.

Można również użyć XML-RPC. Jest to lekki i łatwy w użyciu mechanizm RPC. Możesz go uzyskać here.

2

Możesz wziąć pod uwagę ØMQ. Jest to wieloplatformowa biblioteka wiadomości, która między innymi "automagicznie" obsługuje problemy z połączeniem (w tym ponowne łączenie w przypadku awarii). Istnieją powiązania w wielu językach, a biblioteka czmq zapewnia przyjemny interfejs wysokiego poziomu dla wielu typowych zastosowań ØMQ.

Możesz łatwo użyć wzoru Żądaj odpowiedzi dla struktury RPC, ale podczas czytania guide możesz zauważyć, że inne wzorce są bardziej odpowiednie.

Znalazłem RPC framework zbudowany na górze ØMQ, ale ponieważ najwyraźniej używasz C++, prawdopodobnie to ci nie pomoże (poza nauką). Zobacz także this question. Jeśli chcesz, możesz z łatwością swobodnie toczyć własne.

Licencja ØMQ to "LGPLv3 +", czyli w zasadzie LGPL z wyjątkiem statycznego łączenia. czmq przechodzi na MPLv2, więc nie zdziwiłbym się, gdyby ØMQ podążył za nim wkrótce. Zgodnie z komunikatem twórcy ØMQ, MPLv2 jest bardzo podobny do licencji "LGPLv3 +", ale jest bardziej akceptowalny dla prawników z przedsiębiorstw.

Możesz także rozważyć kod dla swojego kodu interfejsu. Użyliśmy czmq (w tym zbeacon do automatycznego wykrywania węzłów) wraz z serializacją boost i działa bardzo dobrze. W przeszłości używałem XML-RPC i zdecydowanie wolę ØMQ dla oferowanej przez niego funkcjonalności obsługi połączeń.