树莓派与 c++ 运行线程,在网络上发布数据
Raspberry Pi with c++ running thread, publish data on web
我想在网页上显示我的 c++ 程序中处理的一些值,这应该从许多客户端打开,并且该网页对于我的应用程序来说应该是强制性的。
我描述了这些要求,因为我疯狂地解决这个问题:我找到了很多关于 cgi 的样本,它或多或少很清楚它是如何工作的,对于我的范围来说还不够,因为它是从网页调用的过程,但它与我的应用程序无关。我的主要不能通过cgi程序,它应该运行,即使网页从未打开(应该是可选的)。
那么,如何在 cgi 程序和我的主 c++ 程序之间共享数据呢?
保存在文件或数据库上真的是唯一的方法吗?
最后,对我来说需要的是拦截"获取"和"发布"信息,或者从Web服务器(服务器代码脚本)调用我的函数。 但是如何呢?
谢谢安德里亚
如果它是一个单向系统(例如,数据仅从C++程序流向网站上的用户,而不是从网站流向C++程序),那么最简单的方法是写入文件或最好是数据库。
您可以使用MySQL连接器之类的东西从C++代码写入数据库,并且可以在Apache服务器上用PHP非常快速地编写显示数据库数据的基本网站。
另一种解决方案可能是在创建新数据时直接从C++程序将输出写入 HTML 文件。请求数据的用户只能访问您的服务器并从 HTML 文件中获取最新数据。
我这样做的方法是有一个小程序来测量事物并将数据输出到文件中,使用 mv
或 rename
来确保文件被原子替换。
然后使用具有编程功能的Web服务器(我知道PHP,但您可以使用Java,Java Script,Python,C,C++,或者其他十几种语言)。
保持简单 - 除非你绝对有一个标准让它与众不同,在完成事情时,简单总是比复杂好 - 一旦它工作,你可以摆弄它,或者完全重建它并让它变得更好,但至少你有一些东西首先有效。
对事物的请求可以存储在应用程序读取的配置文件中 - 作为 POST 或 URL 参数发送(如果要使用"函数 3",则使用:http://example.com/mypage.php?function=3
等)。
这不是唯一的方法,有很多解决方案。但这是简单的方法,它将在本周末左右解决并可靠地工作,而不是花费您数周时间解决问题并且"永远"无法可靠地工作的解决方案。
我在评论中建议"您可以使用共享内存"。我不是建议你这样做。它很难使用,您需要绝对确保您的数据是原子更新的,否则您会遇到"部分数据属于一个更新,另一个属于旧更新"的问题,因此非常混乱。您不想花费数天或数周的时间尝试使共享内存同步正常工作。如果你真的需要在Web服务器和你的应用程序之间进行通信,我会使用一些形式二(命名?)管道并向应用程序发送请求,并发回响应。
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子