【问题标题】:Is there a high-level inter-process communications API that is implemented in both C++ and Javascript是否有在 C++ 和 Javascript 中实现的高级进程间通信 API
【发布时间】:2012-05-11 12:12:54
【问题描述】:

我正在开发需要在 C++ 应用程序和 Javascript Web 应用程序之间传递消息的应用程序。

当然,我可以用任何一种语言自己编写套接字代码,而且我过去曾在必要时这样做过。

我真正想要的是一个更高级别的消息发布或消息队列 API,它为我做了很多工作。有人知道这样的 API 吗?

我查看了 ICE,但它似乎没有 Javascript 绑定。我还查看了 Boost 消息队列,但它仅适用于 C++ 方面。如有必要,我可能会为这些技术中的任何一种推出自己的 Javascript 绑定。​​

更新:抱歉之前应该提到过,我想在浏览器中运行它。

为了提供更完整的故事,我想要一个简单的基于浏览器的应用程序,用于配置和显示 C++ 应用程序的日志记录。

我知道还有其他方法可以做到这一点,但我对 C++ 和基于浏览器的 Javascript 中的高级库特别感兴趣,它在套接字 API 之上构建消息队列(如果没有的话我可能会考虑自己实现它并写一篇代码项目文章)。

另外:我并不担心网络浏览器的可移植性。例如,如果有一个只能在 Chrome 中运行的高级 IPC Javascript 库,我会很高兴的。

【问题讨论】:

  • 是浏览器还是服务器端的js?什么环境?
  • 您的选择基本上是 JSON/HTTP、XML/HTTP 或使用 WebSockets 的东西。

标签: javascript c++ sockets network-programming websocket


【解决方案1】:

简单回答您的问题:不,ECMAscript 中没有现成的 IPC 实现。

但你实际上已经回答了你的问题。如果您尝试与在浏览器中运行的 Javascript 进行通信,您确实应该使用 (web-)sockets 连接在任一方向上管道日期。当然,你可以用 C++ 编写一个简单的 HTTP 服务器,但我想这有点矫枉过正,而且不具备双向套接字的功能。

在 C++ 中从头开始实现 web-socket 连接仍然需要一些工作(规范在很长一段时间内都在变化),但我想已经有一些库了。

如果您尝试与 node.js 进行通信,使用真正的套接字/管道,这几乎是一项微不足道的任务。

【讨论】:

  • Websockets(IPC 的一种方法)不是开箱即用的吗(至少在某些浏览器中)?
  • XMLHttpRequest怎么不满足IPC的定义?它甚至是 RPC 接口的一个很好的、明显的基础。
  • @jAndy 从头开始​​用 C++ 实现 web-sockets 还有一些工作吗?您是否有任何资源推荐并有助于实现这一目标?
【解决方案2】:

对于 JavaScript,我假设您在浏览器中运行它?在这种情况下,您的 C++ 应用程序需要提供一个 Web 服务器和某种您可以调用的基于 JSON 的 Web 服务。在 JavaScript 方面,您只需使用 AJAX 与该 Web 服务进行通信。

另一种方法是 websockets,但在 C++ 端实现起来可能会有点困难。

【讨论】:

  • 是的,在浏览器中运行它。我想我会在 Javascript 中使用 Web 套接字。
  • 这可能会变得很棘手。根据您想要支持的浏览器版本,您还需要实现回退,因为并非所有浏览器都具有完整的 websocket 支持。基本上你需要socket.io 但对于 C++ 而不是 NodeJS。该网络服务可以在任何地方使用,也可以与 JavaScript 以外的客户端一起使用。
【解决方案3】:

对于服务器端或非浏览器实现,命名管道如何?

是的,它是老式技术,使用情况取决于您使用的操作系统,但只要您的服务器端 js 环境能够读取和写入文件,它就可以工作,并且符合“高级”进程间通信的描述.

【讨论】:

  • 啊哈,根据更新,它是基于浏览器的,所以我的回答不适用。
【解决方案4】:

你可以试试 DBus,它有非常简单的机制来定义、查询和使用接口,并且有一些用于 XPCOM 和基于 webkit 的浏览器的组件(例如http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridgehttp://code.google.com/p/v8-dbus/)。 DBus 也是开源和跨平台的。

【讨论】:

  • 谢谢。看起来很有趣,我会研究一下。
  • 我认为这不会达到他想要的效果。我认为他希望网络应用程序与他服务器上的应用程序通信,而不是与浏览器位于同一本地计算机上的应用程序。这仅在浏览器和 C++ 应用程序位于同一台计算机上时才有效。 (DBus 是一种本地通信方案。)
【解决方案5】:

我找到了满足我需求的解决方案。它并不完美,但我认为它足够好。

有些人建议使用 HTTP 和 ajax。结果证明这是一个有用的想法,经过一些原型设计后,我认为它解决了我相当基本的需求。

更具体地说,我正在使用嵌入在我的 C++ 应用程序中的 Mongoose HTTP 服务器,并且我正在使用 jQuery ajax 函数从服务器中提取数据。 jQuery 客户端不断轮询服务器以获取新数据,效率不是特别高,但我认为它对我来说足够好。

一旦我的实现完成,我会写一篇文章详细解释如何做到这一点,然后我会更新这个答案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2012-03-11
相关资源
最近更新 更多