节点与C应用程序之间的进程间通信

2024-01-09

我有 2 个软件组件,我想互相交谈,

  1. 一个 Node.js Web 应用程序
  2. 用 C 编写的专用服务器(一段相当简单的代码,处理一些我不想为其他语言包装的晦涩库)

我想要的对话非常简单

  • 节点:设置资源 ID A
  • C 应用程序:好的,这是参考号

or

  • 节点:删除这个引用
  • C app:当然,伙计。

有没有什么简单的方法可以在两者之间传递消息?

我目前的理论想法是这样的:

  1. 在2个进程之间有1个tcp/unix套接字,1个会话只是为了避免一直打开和关闭会话(也担心一次会太多)。
  2. 每个匹配的节点请求和 C 应用程序响应都具有相同的 ID(单个 tcp 会话上的 tcp 式会话)
  3. 每个相关节点请求都会生成发送给 C 应用程序的消息,将响应对象存储在某个哈希中,并以会话 id 作为键。
  4. 有一个单节点线程来收集 C 应用程序回复,通过会话 ID 查找响应对象并响应客户端

是不是效率太低了?

节点实际上有线程支持吗? (短暂谷歌没有得出任何具体结果)


基本上你的方向是正确的,你需要某种进程间通信。这实际上取决于您的 IPC 的复杂程度。如果只是一些方法的调用以及在方法之间共享简单的(即整数、字符串)数据,您可以使用unix套接字,它相当容易实现,并且由nodejs原生支持,并且很容易从C中使用好吧(因为所需的标头几乎总是已经可用)

ZeroMQ 为您提供传输抽象(允许 IPC 或真正的基于网络的传输)以及许多甚至晦涩语言的绑定。提供的 C 和 Node 示例应该可以让您立即上手。但是你需要相应的头文件和库;最有可能需要首先构建。

如果您要在程序之间交换的数据更加复杂(读取结构或数组、嵌套对象),那么您将需要一些真正的 RPC 实现。有很多 RPC 实现;就功能而言,Apache Thrift 对我来说看起来非常有前途,尽管最终我无法在合理的时间内构建 thrift 编译器。

所以最后,对于我来说,有一个相当相似的用例,我最终使用 ZeroMQ 进行传输抽象,并在此基础上使用 JSON-RPC 作为 RPC 机制。 JSON-RPC 非常适合 Nodejs 和我使用的 Chttps://github.com/pijyoi/jsonrpc https://github.com/pijyoi/jsonrpc,它构建在 ZeroMQ 和 Jansson 之上。该文档不存在,但如果您已经走到这一步,您就不应该害怕。

就性能而言,我认为这不会成为问题;您的用例听起来并不像您在短时间内有很多请求。由于 ZeroMQ 还提供传统 IPC 作为传输,因此您也可以使用它来提高性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

节点与C应用程序之间的进程间通信 的相关文章

随机推荐