一个c++应用程序的外部Web接口

External Web Interface for a C++ Application

本文关键字:Web 接口 外部 c++ 应用程序 一个      更新时间:2023-10-16

我正在为一个运行在嵌入式系统上的c++应用程序开发一个web界面。

我想知道是否有可能制作一个可用于管理(设置和获取值)和显示应用程序提供的数据的web界面。(类似于Nagios)

我的问题是:有没有一种技术允许我在Web界面和c++应用程序之间进行"通信"?

请记住,我必须在嵌入式系统上这样做,所以我不能使用框架或其他太重的东西。

Web接口必须在c++应用程序之外(我不想在c++应用程序中编写接口)。

我的想法是使用HTML5和Javascript的Web界面,我将使用的Web服务器也是轻量级的(nginx)。

如果有人能给我点建议就太好了。

所以你需要两样东西:一个本地接口,你的网页可以用来配置c++应用程序,和网页本身。

对于这样的本地接口,有一些常见的机制:
  1. 修改配置文件,并发送SIGHUP使应用程序重新读取它

    • 的优点是你可以直接从shell测试(和使用)它,独立于web界面
    • 还注意更改会自动保存
    • 的缺点是你需要一些方案来存储"最后一个好"的配置文件,以防编辑后的文件损坏
  2. 使用本地流套接字和简单协议(如果支持UNIX套接字,或者localhost:port仅限环回的TCP套接字)

    • 的优点是你不碰(和可能损坏)配置文件
    • 的缺点是,如果你想的话,你需要一些其他的方式来持久化更改,而且你必须首先编写这个协议
    • 请注意,只要协议是基于文本的而不是二进制的,您至少仍然可以使用telnet或netcat测试它,因此您仍然可以直接从shell使用它
      • 简单的协议,如set variable=value, get variable等不应该太难

如果你真的想要解耦web和c++应用程序,确保你可以查询可用的选项,理想情况下为它们提供类型,有效范围和组。这样,您就可以避免每次添加或修改选项时重新编码网页。

您可以在配置文件中使用魔法注释来管理它(确保没有静默默认的没有注释),或者使用list命令到流套接字。

只要稍加努力,你就可以在c++应用程序的类型系统中构建你的分组、数据类型和验证约束,这样本地接口和web应用程序都可以自动驱动。

如果你放弃了web服务器在不同进程中的要求,有很多解决方案

轻量级web服务器