2016-03-13 211 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。讓我知道是否有疑慮。

相關問題