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

Best practice to unidirectionally send data from an application to another

本文关键字:应用程序 另一个 最佳 数据 一个      更新时间:2023-10-16

让我解释一下我的情况:

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

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

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

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

这取决于:

机内

C++模块是否与 nodejs 应用程序在同一台机器上运行?那么在我看来最好的方法是将C++模块编译并加载为本机nodejs模块。因此,您的C++应用程序将成为共享库.DLL即nodejs,可以直接从nodejs(即javascript应用程序(调用,例如,该应用程序可以通过promise押注普通的javascript对象。然后你应该使用 nodejs 的 NAPI,我可以在这里找到我使用的构建高效模板的不错。

与其他经典的IPC(进程间通用(技术(作为共享内存或消息管道(相比,使用起来应该更快、更安全。

机器间

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

值得一提的是

  • HTTP with JSON(HTTP意味着TCP,通常被误称为REST(
  • 普罗托布夫
  • 通过升压 ASIO 使用 UDP 或 TCP 提升串行

结论/建议

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

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