【问题标题】:What C++ library to use to write a cross-platform service/daemon?使用什么 C++ 库来编写跨平台服务/守护进程?
【发布时间】:2011-02-09 11:12:41
【问题描述】:

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

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

如果有一个基本的示例服务应用程序也很好。

【问题讨论】:

  • 我意识到这个问题真的非常老了,但我最近开发了一个相关的软件,它不能直接回答这个问题:github.com/cubiclesoft/service-manager 这不是一个库,但它确实解决了编写跨平台系统服务。源代码恰好是用 C++ 编写的,但这几乎无关紧要。

标签: c++ cross-platform service daemon multiplatform


【解决方案1】:

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

【讨论】:

  • Linux 守护进程应该由 init 进程(即 init 或 systemd)自动启动,这需要一个 init 脚本和一些其他设置。他们通常还应该适当地响应 SIGINT,并且经常响应 SIGHUP 或其他可捕获的信号。
【解决方案2】:

Boost 可能拥有您在threadingnetworking I/O 方面所需的大部分功能。

您可能还会发现Qt 是一个不错的选择。它还具有线程和网络库,并且使用运行循环更易于使用和理解事件驱动的编程模型。 Qt 的信号/槽系统非常易于使用,非常适合网络守护程序/服务(Boost 还包括一个signal/slot 系统,但它更难使用并且不包括事件循环;你必须使用一些事件来滚动你自己图书馆)。作为一个跨平台的库,Qt 可以处理桥接 Unix(OS X 和 Linux)与 Windows 心智模型的进程、文件系统等方面的许多问题。

对于单元测试,我对 Google 的 C++ 单元测试库 googletest 非常满意(尽管 Boost 和 Qt 也有内置的单元测试系统)。它在您指定的所有平台上运行。我在跨平台 Qt 项目上使用 googletest 做了很多工作,发现它非常令人满意。

【讨论】:

    【解决方案3】:

    你应该看看POCO。根据您所做的工作,它可以为您完成大量工作,而工作量比 Boost 少得多。

    ACE 的强制性提及,虽然我个人不太关心它。

    【讨论】:

    • 呃,我讨厌 ACE。如果有的话,boost会好得多。两者都很糟糕,但原因不同。 zeroMQ 或许值得一试。 POCO我还没试过,看起来很有趣。
    【解决方案4】:

    说到 Qt,你可以试试qt-service

    【讨论】:

    【解决方案5】:

    我在 ASIO 的非增强版本中发现了一个大库。你不需要所有的 boost 库,只需要这个小标题和非常好的文档库http://think-async.com/

    例如,白天的服务器-客户端系统只需几行代码即可实现。 看看吧。

    (记得看非增强版)

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      相关资源
      最近更新 更多