在Linux上的两个应用程序之间共享数据

时间:2016-03-13 13:50:41

标签: c++ linux node.js

我在Linux上运行了两个进程,一个是NodeJs应用程序,另一个是C ++应用程序。 NodeJs应用程序从服务器接收数据,服务器也是NodeJS应用程序,现在这个数据将由C ++应用程序使用。

现在我正在从NodeJs应用程序的文本文件中写入数据,然后从C ++应用程序中读取它。但这很慢,也会导致问题,因为文件可以异步写入。

我的问题是,在这两个应用程序之间共享数据的最佳方法是什么,同时要记住可以异步接收数据?

4 个答案:

答案 0 :(得分:1)

在NodeJS中为C ++应用程序创建REST API。 (c ++客户端:Mike of SST's answer)。

示例:

var express = require('express');
var app = express();

app.get('/data', function (req, res) {
   var dataObjectToSendHere = 'here';
   res.json(dataObjectToSendHere);
})

var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("Example app listening at http://%s:%s", host, port)

})

答案 1 :(得分:1)

为了帮助您,您需要的是两个事物:将数据从一个应用程序发送到另一个应用程序(您现在使用的是什么文件),以及从另一个应用程序异步发送一个进程的信号(告诉它数据可用。)

可以实际使用文件执行此操作,但不是只使用单个文件而是使用多个文件,每次有新数据时都会使用一个文件。将它们写入另一个进程监视更改的特殊目录中,当它检测到新文件时,它只读取该文件然后删除它。

另一种方法是通过命名管道或套接字(本地(即AF_LOCAL)或“正常”)建立更直接的连接。然后在TCP或UDP之上发明一个简单的协议,它可以处理信令和批量数据传输。

当然,由于一个应用程序是node.js应用程序,您可以简单地使用类似REST的界面,并让其他程序轮询新数据。为此,您不需要任何类型的异步信令,而是node.js应用程序收集并缓存所有传入数据,当另一个应用程序轮询数据时,您传输自上次轮询以来已到达的所有数据。

还有许多其他方法可以做到这一点,只需阅读我在评论中链接到的文章,以了解有关所有这些内容的更多信息。

答案 2 :(得分:1)

正如其他人指出的那样,有多种进程间通信方式,例如:消息传递,共享内存,文件等 在这里,我想推荐一种反应式方法来解决这个问题,因为正如您所提到的那样,数据可以异步传输。 您可以使用内存数据源(如redis)来读取和写入数据。它应该提供一个很好的集成,节点js是一个无sql数据库。这将帮助您减少文件I / O的延迟。现在,您可以构建一个发布者/订阅者范例,其中订阅者会收到有关数据库中任何更改的通知。 Redis为此提供了interface。如果有疑问,请告诉我。

答案 3 :(得分:0)

使用带有localhost的套接字,我认为很好。