使用哪个C++库编写跨平台服务/守护进程?

11

我想知道哪个库可以简化跨平台服务/守护进程的开发?(C / C ++)

我目标是:Windows,Linux和OS X。要求:网络操作和串口通信。

同时拥有一个基本的示例服务应用程序也会很好。


我知道这个问题非常古老,但是我最近开发了一款相关的软件,虽然它并没有直接回答这个问题:https://github.com/cubiclesoft/service-manager/。它不是一个库,但它确实处理了编写跨平台系统服务的困难。源代码恰好是用C++编写的,但这基本上是无关紧要的。 - CubicleSoft
5个回答

8

1
五年过去了,这仍然是谷歌搜索中的最佳答案。更新链接:https://github.com/qtproject/qt-solutions/tree/master/qtservice - chadwick.boulay
@chadwick.boulay 链接失效修复应该是编辑,而不是评论。 - Kyle Strand
除了Qt,还有其他的替代方案吗? - Mayur
GTK怎么样? - Melroy van den Berg

6

在Linux中,守护进程实际上只是一个与终端断开连接的进程。在Windows中,服务是可以使用服务管理API进行控制的内容,但基本上也只是一个断开连接的进程。除了断开连接之外,从任务到任务,守护进程和服务器没有太多共同点。例如,并不要求它们是多线程的,异步的或执行网络I/O操作。鉴于此,很难看出跨平台库会做什么。


Linux守护进程应该由init进程(即init或systemd)自动启动,这需要一个init脚本和一些其他设置。它们通常还应适当地响应SIGINT信号,而且经常也会响应SIGHUP或其他可捕获的信号。 - Kyle Strand

5
你应该看一下POCO。根据你的需求,它可能会比Boost更轻松地为你完成大量工作。
虽然我个人不太喜欢,但是必须提到ACE

我讨厌ACE。如果说什么的话,boost要好得多。尽管两者都有各自不足之处。或许值得尝试一下zeroMQ。我还没有尝试过POCO,看起来很有趣。 - Not_a_Golfer

3

Boost 可能已经包含了你在编程中需要的大部分 线程处理网络 I/O 相关内容。

你也可以考虑使用Qt,它同样提供了线程处理和网络库,并且使用基于运行循环的事件驱动编程模型,更加易用易懂。Qt 的信号/槽机制非常容易使用,非常适合网络守护进程/服务(Boost 也包含信号/槽系统,但难以使用,而且不包括事件循环;你需要使用一些事件库自己实现)。作为跨平台库,Qt 可以处理许多 Unix(OS X 和 Linux)与 Windows 之间的进程、文件系统等问题。

对于单元测试,我非常满意谷歌的C++单元测试库googletest(尽管Boost和Qt也有内置的单元测试系统)。它可以在您指定的所有平台上运行。我已经在跨平台的Qt项目中使用过googletest并发现它非常令人满意。


0

我在非boost版本的ASIO中找到了一个很大的库。你不需要所有的boost库,只需要这个小而且非常好文档化的头文件库http://think-async.com/

作为示例,一个白天服务器-客户端系统可以用很少的代码实现。 看一下吧。

(记得看非boost版本的)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接