【问题标题】:Raspberry Pi with c++ running thread, publish data on webRaspberry Pi 带 C++ 运行线程,在 Web 上发布数据
【发布时间】:2015-02-01 18:48:16
【问题描述】:

我想在网页上显示我的 c++ 程序中处理的一些值,这应该从许多客户端打开,并且该网页对于我的应用程序不是强制性的。

我描述了这些要求是因为我很想解决这个问题: 我发现了许多关于 cgi 的示例,它或多或少是清楚的,它是如何工作的,这对于我的范围来说还不够,因为它是一个从网页调用的进程,但它与我的应用程序没有任何联系。我的 main 不能通过 cgi 程序,即使网页从未打开它也应该运行(应该是可选的)。

那么,如何在 cgi 程序和我的主 c++ 程序之间共享数据?

保存文件或数据库真的是唯一的方法吗?

最后,我需要的是拦截“获取”和“发布”信息,或者从 Web 服务器(服务器代码脚本)调用我的函数.. 但是如何?

谢谢 安德烈亚

【问题讨论】:

  • “文字墙” - 稍微分解一下。完成此操作后,深呼吸,并解释您的整体设置是什么。您的 Pi 是否连接到互联网,如果您输入 http://AndreasRaspberryPi/,您希望页面提供一些漂亮颜色的数字,或者您是否有一个不同的网络服务器,与您的 Pi 连接?跨度>
  • raspy 已经连接到我家的网络,下一步会发布到网络上,但是,目前,我们可以专注于在 raspy 浏览器或浏览器上打开我的网页连接在同一网络上的电脑...就像你写的输入设备的 ip。
  • 数据多久更改一次?您是否可以设置一个具有静态页面的网络服务器[可能具有定时自动重新加载],并在需要更新时执行“重命名”以原子地用新页面替换旧页面?还是需要毫秒精度的访问?
  • 我的意思是,中间的东西.. 老实说,我正在寻找一种能够以某种方式将数据共享到内存中的方法.. 在我的网页中,我想发布一些温度,一些图标,显示一些硬件输入的状态。此外,一些按钮来激活功能等..所以我需要在网络服务器和我的程序之间进行交互,没有时间要求,甚至 1 秒刷新但例如我不喜欢每一秒重新加载整个页面......
  • 如果它运行类似于 Linux 的东西,您可以使用共享内存,但这要棘手得多,因为您可能不想阅读“半完成”更新,因此您需要使用某种形式锁等。

标签: c++ webserver cgi


【解决方案1】:

如果它是一个单向系统(例如,数据仅从 C++ 程序流向网站上的用户,而不是从网站流向 C++ 程序),那么最简单的方法是写入文件或最好是数据库.

您可以使用 the MySQL connector 之类的东西从您的 C++ 代码写入数据库,并且可以在 Apache 服务器上用 PHP 非常快速地编写一个显示来自数据库的数据的基本网站。

另一种解决方案可能是在创建新数据时直接从 C++ 程序将输出写入 HTML 文件。请求数据的用户可以访问您的服务器并从 HTML 文件中获取最新数据。

【讨论】:

  • 正如我写的那样,我正在寻找一种不同的方法,无需编写文件或数据库,只是网络服务器和我正在运行的程序之间的一种通信.. 如果这是唯一的方法.. 好的。 . 但对我来说很奇怪..
【解决方案2】:

我这样做的方法是有一个小程序来测量事物并将数据输出到文件中,使用mvrename 确保文件被原子替换。

然后使用具有编程功能的网络服务器(我知道 PHP,但您可以使用 Java、Java Script、Python、C、C++ 或可能十几种其他语言)。

让事情保持简单 - 除非你绝对有一个标准让它与众不同,否则在完成事情时,简单总是比复杂好 - 一旦它起作用,你可以摆弄它,或者完全重建它并让它变得更好,但至少你有一些首先起作用的东西。

对事物的请求可以存储在您的应用程序读取的配置文件中 - 作为 POST 或 URL 参数发送(如果您想使用“函数 3”,那么您可以使用:http://example.com/mypage.php?function=3 等)。

这不是唯一的方法,有很多解决方案。但这是一种简单的方法,它可以在本周末左右解决并可靠运行,而不是需要花费几周时间才能解决问题并且“永远”不能可靠运行的解决方案。

我在评论中建议“您可以使用共享内存”。我不建议你这样做。它很难使用,你需要绝对确定你的数据是原子更新的,否则你会遇到“部分数据属于一个更新,另一个属于旧更新”的问题,因此非常混乱。您不想花费数天或数周的时间来尝试使共享内存同步正常工作。如果您确实需要在网络服务器和您的应用程序之间进行通信,我会使用某种形式二(命名?)管道并将请求发送到应用程序,然后发回响应。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多