向 C++ 应用程序添加 Web 界面/控件

问题描述 投票:0回答:1

我在树莓派(无头设置)上有一个 C++ 程序,它在几天内每分钟记录来自 ADC 的数据并将其存储在文件中。我想向其中添加一个 Web 界面,该界面可能会启动程序的许多实例,跟踪它们直到完成为止的进度,查看可能在图表中的数据并在完成后下载记录的数据。启动后,我希望即使在客户端关闭 Web 界面后实例也能运行。这样做的最佳方法是什么? 对我来说最麻烦的部分似乎是在网络服务器的后台维护一个长期运行的任务,这在概念上是短暂的(当客户端关闭浏览器中的选项卡时会话结束)


到目前为止我考虑过什么

  1. 现成的 Web 服务器,例如带有 CGI 的 nginx 和 apache:但概念问题是相同的。如果我安排它以便在单击按钮时执行 cgi 应用程序,因为 cgi 应用程序必须在网络服务器向客户端发送响应之前返回,我看不出它如何完成这项工作。即使我将它作为子进程启动并分离它,我也会失去对它的终止、检查进度等的控制。如果可能的话,c++ 中有一个好的 cgi/fastcgi 库吗?
  2. 像wt框架之类的东西:同样的问题。 WRun 为每个“会话”(客户端)创建一个 wtapplication 类的对象,并在客户端断开连接或一段时间不活动后释放它们。因此,当启动程序的客户端断开连接时,我会失去对启动程序的跟踪。

还有其他方法可以做到这一点吗?或者在这种情况下采用某种解决方案?还有其他需要考虑的库/框架/解决方案吗?

c++ webserver cgi fastcgi wt
1个回答
0
投票

这对于 Wt 来说是完全可行的。例如,请参阅服务器推送示例

以最简单的形式,您可以启动一个新的后台线程,如下所示:

std::thread([](){
  ... // your background task.
}).detach();

如果您希望工作线程和 GUI 之间进行一些交互,请查看 服务器推送示例

© www.soinside.com 2019 - 2024. All rights reserved.