将数据从一个应用程序单向发送到另一个应用程序的最佳实践

Best practice to unidirectionally send data from an application to another

让我解释一下我的情况:

我有一个 (c++) 模块,它以每秒 10 次的速度从应用程序 1 收集数据。

我有另一个 (nodejs) 应用程序 2,它需要从该模块获取数据。

我的问题是:从模块共享数据以便应用程序 2 可以读取的最佳跨平台方式是什么?

我的技术是从模块写入 UDP 套接字并从应用程序 2 读取该套接字。但由于我从未这样做过,所以我不确定这是最好的方法。

这取决于:

机器内

C++ 模块 运行 是否与 nodejs 应用程序在同一台机器上? 那么我认为最好的方法是编译和加载 C++ 模块本机 nodejs 模块。所以你的 C++ 应用程序将成为一个共享库,即 nodejs 的 DLL,它可以直接从 nodejs 调用,即 javascript 应用程序,它可以通过一个承诺来打赌普通的 javascript 对象。那么你应该使用 NAPI from nodejs, a nice to build productive template I use can be found here.

与共享内存或消息管道等其他经典 IPC(进程间通信)技术相比,这应该更快更安全地使用。

机器间

但是,如果您的应用程序 运行 运行在不同的机器上,包括同一物理设备(如虚拟机)上的不同机器, 您需要某种网络方式。不同的 machines/different 物理计算机和不同的 machines/same 物理计算机之间的唯一区别是,在后一种情况下,您将使用所谓的环回地址,而不是特定的变量地址。但是从这里开始,它会非常广泛地确定哪种调用方式、对象序列化或传输协议最适合您的情况,并且在很大程度上是基于意见的。

几个值得一提的是

  • HTTP with JSON(HTTP 表示 TCP,经常被误称为 REST)
  • Protobuf
  • 通过增强 ASIO 使用 UDP 或 TCP 增强串行

Conclusion/Recommendation

由于您已经在 nodejs 环境中,其中 HTTP/JSON 很常见,我会尝试将您的 C++ 模块打包到 nodejs 本机模块中,即使它必须与其他 nodejs 实例进行通信其他机器。但是 HTTP/JSON 使用 nodejs 更容易,你只需转发 C++ 模块中的 javascript 对象。

或者您使用 boost beast 或 asio 作为原生 HTTP 方法,但这会消耗很多时间。