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

C++ 将数据从一个应用程序单向发送到另一个应用程序的最佳实践,c++,node.js,udp,C++,Node.js,Udp,让我解释一下我的情况: 我有一个C++模块,它以每秒10次的速度从应用程序1收集数据。 我有另一个nodejs应用程序2,它需要从该模块获取数据 我的问题是:共享模块中的数据以便应用程序2能够读取数据的最佳跨平台方式是什么 我的技术是从模块写入UDP套接字,然后从应用程序2读取该套接字。但由于我从未这样做过,我不确定这是最好的方法。这取决于: 机内 < C++模块是否运行在与NoDEJS应用程序相同的机器上?我认为最好的方法是编译和加载C++模块作为本地NoDEJS模块。因此,C++应用程序将成

让我解释一下我的情况:

我有一个C++模块,它以每秒10次的速度从应用程序1收集数据。 我有另一个nodejs应用程序2,它需要从该模块获取数据

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

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

这取决于:

机内 < C++模块是否运行在与NoDEJS应用程序相同的机器上?我认为最好的方法是编译和加载C++模块作为本地NoDEJS模块。因此,C++应用程序将成为共享库,即NoDEJS的DLL,它可以直接从NoDjs调用,即JavaScript应用程序,它可以通过一个承诺来打赌普通JavaScript对象。然后您应该使用,可以找到我使用的一个很好的构建高效模板

与其他经典的IPC进程间公共教育技术(如共享内存或消息管道)相比,使用这种技术应该更快、更安全

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

值得一提的是

HTTP和JSON HTTP意味着TCP,通常错误地将REST称为 通过Boost ASIO使用UDP或TCP进行Boost串行 结论/建议 <>因为您已经在一个NoDEJS环境中,HTTP/JSON是常见的,所以我会尝试在一个NoDEJS本地模块中打包您的C++模块,即使它必须与另一台机器上的其他NoDEJS实例通信。但是,对于NoDJS来说,HTTP/JSON更容易,并且您只需从C++模块中转发JavaScript对象。p>
或者使用boost beast或asio作为本机HTTP方法,但这将耗费大量时间

至少这是一种始终有效的方法,即使在不同的机器上也是如此。使用UDP时,您必须自己注意错误,如数据包丢失等。TCP将为您完成大部分工作。另一方面,您需要自己检测数据包边界。如果两个应用程序都在同一台计算机上,那么也有其他选项,例如共享内存、管道、命名管道、通过文件或数据库进行数据交换、可能由操作系统提供的消息队列,如ZeroMQ等。。。。node.js对这些选项的支持程度如何,我不知道,没有经验。它是一条消息流,还是它不断地更新同一条数据?内存映射文件是另一种选择。@ MeimeGeRoSukKin这是同一段数据一遍又一遍,我已经把C++模块看作是本地NoDEJS模块,但事实是C++文件直接加载到它从应用程序中提取数据,因此我无法编译它并将其直接加载到nodejs中。然而,答案的机器内部部分,特别是协议缓冲区可能是解决方案。感谢您花时间编写这样一个完整的答案。如果仍然是InMachine,您说InMachine用于grpc,但这更适用于intermachine,那么boost process也值得一看,因为您可以简单地为应用程序加载一个节点本机模块和库,并有一种可移植的方式来使用共享内存。这是最快的方法,但是有一些缺点,比如你必须关心同步和x86/x64互通。