2010-04-18 9 views
11

Mi chiedo quale libreria possa facilitare lo sviluppo di un servizio/demone multipiattaforma? (C/C++)Quale libreria C++ usare per scrivere un servizio/demone multipiattaforma?

Ho scelto come target: Windows, Linux e OS X. Requisiti: operazioni di rete e comunicazione con porta seriale.

Inoltre sarebbe bello avere un'applicazione di servizio di esempio di base.

+0

Mi rendo conto che questa domanda è molto, molto vecchio ma di recente ho sviluppato un pezzo correlata di software che non risponde direttamente alla domanda: https: // github.com/cubiclesoft/service-manager/ Non è una libreria ma si occupa delle difficoltà di scrittura dei servizi di sistema multipiattaforma. Il codice sorgente sembra essere scritto in C++, ma per la maggior parte è irrilevante. – CubicleSoft

risposta

5

Quando si tratta di Qt si potrebbe provare qt-service.

+1

5 anni fuori e questa è ancora la risposta migliore in una ricerca su google. Link aggiornato: https://github.com/qtproject/qt-solutions/tree/master/qtservice –

+0

@ chadwick.boulay le correzioni di link-rot dovrebbero essere davvero delle modifiche, non dei commenti. –

6

Un daemon in Linux è in realtà solo un processo che viene eseguito disconnesso da un terminale. In Windows, un servizio è qualcosa che può essere controllato usando l'API di gestione del servizio, ma ancora una volta è fondamentalmente solo un processo disconnesso. La disconnessione da parte, i demoni dei server & non hanno molto in comune, da un'attività all'altra. Non è richiesto, ad esempio, che siano multi-thread, che siano asincroni o che eseguano l'I/O di rete. Detto questo, è piuttosto difficile vedere cosa farebbe una libreria multipiattaforma.

+0

I demoni Linux dovrebbero essere avviati automaticamente dal processo init (cioè init o systemd), che richiede uno script di init e qualche altro setup.In genere dovrebbero anche rispondere adeguatamente a SIGINT e spesso a SIGHUP o altri segnali intercettabili. –

3

Boost probabilmente ha la maggior parte di ciò che è necessario in termini di threading e networking I/O.

Potresti anche trovare Qt una buona alternativa. Dispone inoltre di librerie di threading e di rete e ha un molto più facile da usare & comprendere il modello di programmazione basato sugli eventi utilizzando un ciclo di esecuzione. Il sistema Qt di segnale/slot è molto facile da usare e ideale per un demone/servizio di rete (Boost include anche un sistema signal/slot ma è più difficile da utilizzare e non include un ciclo di eventi, è necessario eseguire il rollover utilizzando una libreria di eventi) . Come libreria multipiattaforma, Qt può gestire molti dei problemi nel collegare Unix (OS X e Linux) rispetto al modello mentale di Windows per processi, filesystem, ecc.

Per il collaudo di unità, sono stato molto felice con la libreria di test delle unità C++ di Google denominata googletest (sebbene sia Boost che Qt dispongano anche di sistemi di test dell'unità integrati). Funziona su tutte le piattaforme specificate. Ho lavorato molto con googletest su progetti Qt multipiattaforma e l'ho trovato abbastanza soddisfacente.

5

Si consiglia di dare un'occhiata POCO. A seconda di ciò che stai facendo, potrebbe avere strutture per fare una grande quantità di lavoro per te con molto meno lavoro di Boost.

Una menzione obbligatoria per ACE anche se personalmente non mi interessa molto.

+0

ugh, odio ACE. Se non altro, boost è molto meglio. entrambi aspirano per ragioni diverse però. zeroMQ vale forse una prova. Non ho ancora provato POCO, sembra interessante. –

0

Ho trovato una grande libreria nella versione non boost di ASIO. Non hai bisogno di tutta la libreria di boost ma solo di questa piccola libreria headers-only e molto ben documentata http://think-async.com/

Come esempio, un sistema client-server diurno è implementato in pochissime righe di codice. Dai un'occhiata.

(ricordatevi di guardare la versione non-ized spinta)