/ / nofloから始めて、nodejsから実行する - node.js、noflo

nofloからnodejs-node.js、nofloから実行します。

単純なnofloの例を実行しました ノフロ発の。しかし、私は、nofloがノードや他のコードでどのように動作するべきかを考え出すことができていません。

最初に私はこのFBPファイルを持っていました:

# In the graph we first need to define the nodes and the connections between them
Read(filesystem/ReadFile) OUT -> IN Display(core/Output)

# Start off the graph by sending a filename to the file reader
#"package.json" -> IN Read

私は試した: noflo.loadFile(filepath, nodedir, function(graph)

これは機能し、コンソールに表示されます。 しかし、fbpの最後の行を省略すると、 package.json パラメータ、グラフを実行する方法が見つかりませんでした。

コマンドラインからではなく、nodejsコードからnofloを使用する方法についてのガイドがありますか。

回答:

回答№1は5

通常、NoFloコンポーネントは何らかの入力を受け取る前には何もしません。 NoFloコンポーネントドキュメント

NoFloネットワーク内のコンポーネントの実行中のインスタンスは、 プロセス。プロセスがデータを受け取る前に 不活性単にその入力ポートを聞いているだけです。ネットワークが始まったときに何かを始めなければならないプロセスはそれらに初期情報パケットを送ることによってそれを始めるために引き起こされるべきです。

あなたの最後の行 .fbpグラフ定義 文字列を送信しています package.json ReadFileコンポーネントに追加します。

ファイルをNoFloネットワークにロードした後で、プログラム的にこれを行うこともできます。

noflo.loadFile(filepath, process.cwd(), function (network) {
// Now we have access to the NoFlo network instance

// Add Initial Information Packet programatically
network.graph.addInitial(someFileToRead, "Read", "in");

// Tell NoFlo to send the new IIPs
network.sendInitials();
});

エクスポートされたポートとサブグラフ

今、これを行うためのよりエレガントな方法もあります。 .fbp NoFloのComponentLoaderにグラフとしてファイルを作成し、他のコンポーネントと対話するときにそれを操作します。

興味のあるポートを外部から利用できるようにするには、 輸出する それら。この場合、少なくともグラフのReadFile INポートです。これにより、ネットワーク定義は次のように変更されます。

# Export the filename port so it can be accessed from outside
INPORT=Read.IN:FILENAME

# The rest of the graph definition follows
Read(filesystem/ReadFile) OUT -> IN Display(core/Output)

(それが起こるように、これはまさに私がエクスポートポートで使用していた例です .fbp言語定義

グラフをコンポーネントとして使用可能にするには、それをNode.jsプロジェクト内に保存する必要があります(規約は graphs/ サブディレクトリ)に登録して package.json ファイル:

{
"noflo": {
"graphs": {
"MyGraph": "graphs/MyGraph.fbp"
}
}
}

これで他のコンポーネントとして扱うことができます。例えば:

var loader = new noflo.ComponentLoader(__dirname);
loader.load("MyGraph", function (instance) {
// The instance is a running NoFlo subgraph with your graph definition

// Create a socket and attach it to the exported port
var filename = noflo.internalSocket.createSocket();
instance.inPorts.filename.attach(filename);

filename.send(someFileToRead);
filename.disconnect();
});

これが好ましい方法の1つの理由はこれを使用してIIPを送信するだけでなく、エクスポートされた出力ポートにソケットを接続してそれらのイベントをlistenすることもできます。このようにして、あなたはあなたのJavaScriptアプリケーションの非同期関数としてどんなNoFloグラフでも簡単に利用することができます。