2016-03-13 170 views
0

我有两个在Linux上运行的进程,一个是NodeJs应用程序,另一个是C++应用程序。 NodeJs应用程序从也是NodeJS应用程序的服务器接收数据,现在该数据将由C++应用程序使用。在Linux上的两个应用程序之间共享数据

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

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

+1

执行[*进程间通信*](https://en.wikipedia.org/wiki/Inter-process_communication)的方法很多,而文件只是其中之一。 –

回答

1

在NodeJS中为C++应用程序创建REST API。 (C++客户端:https://github.com/mrtazz/restclient-cpp)。

例子:

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) 

}) 
0

使用套接字与本地主机,我认为是好的。

1

为了帮助你多一点,你需要的是件事情:从一个应用程序发送数据到另一个(你用什么文件了),以及异步从另一个信号一个进程(告诉它数据可用)。

可以实际上是用文件做到这一点,但是不是只使用单个文件,而是每次使用多个文件时,每次有新数据。将它们写入其他进程监视更改的特殊目录中,当它检测到新文件时,它会简单地读取该文件并将其删除。

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

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

还有很多其他方法可以做到这一点,只需阅读我在评论中链接到的文章,即可详细了解所有这些文章。

1

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

相关问题