我有一个 C++ 应用程序,它使用 httplib 从文件夹中提供 HTML/JS 前端服务。目前,我需要编译的 C++ 程序和此文件夹才能使应用程序正常工作。有没有办法将前端文件夹嵌入到 C++ 可执行文件中以创建单文件应用程序?
这是我当前设置的一个最小示例:
#include <iostream>
#include <thread>
#include <httplib.h>
httplib::Server rest;
void run_rest_server(const int port)
{
try
{
rest.set_mount_point("/", "./frontend");
rest.listen("0.0.0.0", port);
}
catch (const std::exception&)
{
std::cout << "Could not start REST Server" << std::endl;
}
}
int main()
{
std::thread(run_rest_server, 81).detach();
while (true) { /*...*/ }
}
我找到了一种基于资源的方法,但它需要单独嵌入每个文件,这对于包含数百个文件的前端文件夹来说是不切实际的。有没有更有效的方法?
此外,我正在不断更新前端,因此保持高效的开发工作流程对我来说至关重要。理想情况下,我想要一个解决方案,我仍然可以单独处理前端代码,只需要运行 C++ 编译器即可发布应用程序的新版本。
即使您的 C++ 后端受到限制,您也可以采取多种途径来使您的流程可扩展且对开发人员友好。
与 C++ 后端分开提供 HTML 文件。 例如:生成的每个新 html 文件应自动将目录更改推送到 github 存储库,这将启动 Github Action / CI / CD 进程来更新托管在 Vercel (或 Netlify,或甚至 Github Pages)都是免费的。 现在,您可以将这个新托管的网页作为 iframe 嵌入到您的 C++ 后端中,并且每次生成新的 HTML 文件以及静态文件的后续部署时,您也应该能够在您的 C++ 托管服务器上看到它。
更新您的 C++ 代码以持续侦听对新目录的任何更改,并且每次生成 HTML 时,您都应该将其添加到服务器上的该目录(通过添加一个端点,允许您作为管理员将文件添加到服务器,或者通过在服务器本身上生成 HTML)。侦听目录更改的 C++ 代码应该能够帮助您更新可能已添加或更新的任何新页面!
无论您采取哪种方式,都要知道,只要文件托管在互联网上的某个位置,您就应该能够设置 iframe/重定向到该页面。希望这有帮助。