2011-11-23 11 views
7

Sto cercando un buon modo per connettere due sistemi: 1) un'applicazione basata su Qt in esecuzione su Ubuntu e 2) un'applicazione basata su Boost in esecuzione su un'altra macchina Ubuntu. Entrambe le applicazioni utilizzano una libreria comune in cui inserirò il codice dell'interfaccia comune. Mi piacerebbe usare un'interfaccia di tipo RPC. Ho guardato CORBA e D-Bus ma mi chiedo che cosa hanno usato o raccomanderebbero altre persone.Qt e Boost RPC

Grazie in anticipo.

risposta

4

Apache Thrift è un framework RPC cross-language sviluppato originariamente da Facebook. Un prototipo che ho scritto qualche tempo fa lo usava, penso che fosse abbastanza semplice da usare (non ricordo alcun problema). Sarebbe una buona scelta se in seguito si desideri estendere il sistema con componenti scritti in altre lingue.

0

Internet Communications Engine (Ice) è un meccanismo RPC moderno e aggiornato che supporta molte lingue. È possibile scaricarlo here. Gran parte delle API Ice sono definite in Slice, che è il linguaggio delle specifiche per Ice.

Slice (Specification Language for Ice) è il meccanismo di astrazione fondamentale per separare le interfacce degli oggetti dalle loro implementazioni. Slice stabilisce un contratto tra client e server che descrive i tipi e le interfacce oggetto utilizzate da un'applicazione. Questa descrizione è indipendente dal linguaggio di implementazione, quindi non importa se il client è scritto nella stessa lingua del server.

Le definizioni di slice sono compilate per un particolare linguaggio di implementazione da un compilatore ad esempio per C++.

È anche possibile utilizzare XML-RPC. È un meccanismo RPC leggero e facile da usare. Puoi ottenerlo here.

2

Si può considerare ØMQ. È una libreria di messaggistica multipiattaforma che, tra le altre cose, "automagicamente" gestisce i problemi di connessione (inclusa la riconnessione in caso di guasti). Esistono binding in molte lingue e la libreria czmq offre un'interfaccia C di alto livello per molti usi comuni di ØMQ.

È possibile utilizzare facilmente il modello di richiesta di risposta per un framework RPC, ma leggendo lo guide, è possibile che altri pattern siano più appropriati.

Ho trovato uno RPC framework costruito su ØMQ, ma dal momento che si utilizza apparentemente C++, questo probabilmente non vi aiuterà (a parte per scopi di apprendimento). Vedi anche this question. Probabilmente potresti facilmente arrotolare il tuo, se vuoi.

La licenza di ØMQ è "LGPLv3 +", che è fondamentalmente LGPL con un'eccezione di collegamento statico. czmq si sta spostando su MPLv2, quindi non sarei sorpreso se ØMQ seguisse presto l'esempio. Secondo un messaggio del creatore di ØMQ, l'MPLv2 è molto simile alla licenza "LGPLv3 +", ma più accettabile per gli avvocati delle imprese.

Si può anche considerare boost serialization per il proprio codice di interfaccia. Abbiamo usato czmq (incluso zbeacon per il rilevamento automatico dei nodi) insieme alla serializzazione boost, e funziona molto bene. In passato ho utilizzato XML-RPC e preferisco di gran lunga ØMQ per la funzionalità di gestione delle connessioni che offre.