【问题标题】:Best practice for an AJAX call to running C code?AJAX 调用运行 C 代码的最佳实践?
【发布时间】:2012-09-03 19:07:59
【问题描述】:

我有一个底层 C 应用程序驱动一些非常密集的硬件。我目前正在为设备设计一个 Web 界面,它的大部分功能是向用户呈现状态信息。所以每隔一秒左右,用相关信息(温度,帧率,yada yada ...)更新网页上的字段。该设备运行linux并具有apache。当前设置:

  1. 来自 Web 状态页面的 Javascript 进行 AJAX 调用(来自 setInterval)
  2. PHP 文件运行,写入FIFO
  3. C 应用程序读取FIFO,根据输入进行一些工作(可能为空白,意味着只给我统计信息),回写到FIFO
  4. PHP 文件从FIFO 读取,解析,json_encode,回显
  5. Javascript 解析 JSON 并更新页面

这就是你进来的地方......目标是取出 PHP 中间人。对 C 程序的 AJAX 调用有哪些约定(假设它们存在)?最佳做法?

选项(据我所知):

  • Sockets。让 C 程序监听特定端口. Something similar here.
  • Node.js。这个我不熟悉,没用过。但是我短暂的曝光让我觉得这可能是一个很好的用途呢?据我了解......它是“服务器端的javascript”,但它实际上是C代码?只是需要一些见解。
  • CGI。 cgi 可以与不断运行的 C 程序一起工作吗?还是在调用时从头开始加载 C 程序?
  • HTML5 WebSockets?

任何见解表示赞赏。当然,最好的答案很可能甚至没有在上面列出。这只是我在这方面的知识范围。谢谢!

【问题讨论】:

  • 这更适合论坛或聊天室。我们在 StackOverflow 专注于解决您遇到的具体问题。我并不是想说你的问题是愚蠢的、糟糕的或任何问题,它只是不在 StackOverflow 的范围内。
  • 采用 node.js 方式 - 它支持 WebSockets 以防止昂贵的setInterval 轮询。不是C,是纯js。
  • @moonwave99 相当多的节点是用 c++ 编写的;) 可以用 c++ 编写节点扩展,参见 lupomontero.com/writing-node-js-modules-in-cpp
  • @padde 哦,就像 Objective-C++ for objc-c 一样:很高兴知道,谢谢!
  • @moonwave99 好吧,区别在于objective c不需要c++,而node实际上是用c++编写的。您可以将其与 ruby​​ 的原生 c 扩展进行比较。

标签: javascript c ajax node.js


【解决方案1】:

我们使用 C 库 libwebsockets (http://libwebsockets.org/) 在 JavaScript 和 C++ 应用程序之间进行通信。在我们的例子中,我们通过 websockets 将 JSON 发送到 C++ 后端和从 C++ 后端发送。

在您的情况下,您可以获取当前通过 Ajax 发送的相同数据,并通过 websocket 将其发送到 C 程序。然后,C 程序可以生成与 PHP 程序生成的 JSON 相同的 JSON,然后再次通过 websocket 将其发送回 JavaScript。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多