2010-04-18 18 views
11

Me pregunto qué biblioteca facilitaría el desarrollo de un servicio/daemon multiplataforma? (C/C++)¿Qué biblioteca C++ usar para escribir un servicio/daemon multiplataforma?

Estoy orientado a: Windows, Linux y OS X. Requisitos: operaciones de red y comunicación de puerto serie.

También sería bueno tener una aplicación de servicio de muestra básica.

+0

realizo esta pregunta es muy, muy viejo, pero recientemente he desarrollado una pieza relacionada de software que no responde directamente a la pregunta: https: // github.com/cubiclesoft/service-manager/ No es una biblioteca, pero se ocupa de las dificultades de escribir servicios de sistema multiplataforma. El código fuente está escrito en C++, pero eso es casi irrelevante. – CubicleSoft

Respuesta

5

Cuando se trata de Qt puede probar qt-service.

+1

5 años y esta sigue siendo la principal respuesta en una búsqueda en Google. Enlace actualizado: https://github.com/qtproject/qt-solutions/tree/master/qtservice –

+0

@ chadwick.boulay Las correcciones de link-rot realmente deberían ser ediciones, no comentarios. –

6

Un daemon en Linux es en realidad un proceso que se ejecuta desconectado de un terminal. En Windows, un servicio es algo que se puede controlar utilizando la API de administración de servicios, pero una vez más es básicamente un proceso desconectado. Dejando de lado la desconexión, los servidores & de daemons no tienen mucho en común, de una tarea a otra. No hay ningún requisito, por ejemplo, que sean de subprocesos múltiples, sean asíncronos o realicen E/S de red. Dado eso, es un poco difícil ver qué haría una biblioteca multiplataforma.

+0

Se espera que los demonios Linux se inicien automáticamente mediante el proceso init (es decir, init o systemd), que requiere un script de inicio y alguna otra configuración.Por lo general, también deberían responder apropiadamente a SIGINT y, a menudo, a SIGHUP u otras señales detectables. –

3

Boost probablemente tiene la mayoría de lo que necesita en términos de threading y networking I/O.

También puede encontrar Qt una buena alternativa. También tiene librerías de enhebrado y conexión en red y tiene un modelo de programación basado en eventos mucho más fácil de usar que usa un ciclo de ejecución. El sistema de señales/ranuras de Qt es muy fácil de usar e ideal para un daemon/servicio de red (Boost también incluye un sistema signal/slot pero es más difícil de usar y no incluye un bucle de eventos; debe realizar su propio uso de alguna biblioteca de eventos) . Como una biblioteca multiplataforma, Qt puede manejar muchos de los problemas relacionados con el modelo mental de Unix (OS X y Linux) frente a Windows para procesos, sistemas de archivos, etc.

Para pruebas de unidades, he estado muy feliz con la biblioteca de pruebas de unidades C++ de Google llamada googletest (aunque tanto Boost como Qt también tienen sistemas integrados de pruebas de unidades). Se ejecuta en todas las plataformas que especifique. He trabajado mucho con googletest en proyectos Qt multiplataforma y considero que es bastante satisfactorio.

5

Debería echar un vistazo POCO. Dependiendo de lo que esté haciendo, podría tener instalaciones para hacer una gran cantidad de trabajo por usted con mucho menos trabajo que Boost.

Mención obligatoria para ACE aunque personalmente no me importa demasiado.

+0

ugh, odio a ACE. En todo caso, el impulso es mucho mejor. ambos apestan por diferentes razones sin embargo. zeroMQ vale la pena intentarlo tal vez. No he probado POCO aún, parece interesante. –

0

Encontré una gran biblioteca en la versión no reforzada de ASIO. No necesita toda la biblioteca de impulso, sino solo esta pequeña biblioteca solo con encabezados y muy bien documentada http://think-async.com/

Como ejemplos, se implementa un sistema de cliente-servidor diurno en muy pocas líneas de código. Échele un vistazo.

(recuerde que debe mirar el impulso versión no-izada)

Cuestiones relacionadas