/ / Zaczynając od noflo, uruchamiając go z nodejs - node.js, noflo

Zaczynając z noflo, uruchamiając go z nodejs - node.js, noflo

Mam uruchomiony prosty przykład noflo od noflo. Ale nie mam szczęścia w ustalaniu, jak noflo powinno działać z węzłem i innym kodem.

Na początku miałem ten plik 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

Próbowałem: noflo.loadFile(filepath, nodedir, function(graph)

To działa i drukuje na konsoli. Ale jeśli pominę ostatnią linię w fbp, spowoduje to podanie package.json parametr, nie znalazłem sposobu na uruchomienie wykresu.

Czy jest gdzieś przewodnik, jak używać noflo z kodu nodejs, a nie z wiersza poleceń?

Odpowiedzi:

5 dla odpowiedzi № 1

Zazwyczaj komponenty NoFlo nie robią nic, zanim otrzymają jakieś dane wejściowe, w tym przypadku ścieżka do pliku, z którego mają być odczytywane. Dokumentacja komponentu NoFlo:

Działające wystąpienie komponentu w sieci NoFlo nosi nazwę proces. Zanim proces otrzyma dane, powinien obojętny, po prostu nasłuchując jego portów wejściowych. Procesy, które muszą zacząć coś robić, gdy sieć jest uruchamiana, powinny być wyzwalane, aby to zrobić, wysyłając im początkowy pakiet informacyjny.

Ostatnia linia w twoim Definicja wykresu .fbp wysyła ciąg package.json do składnika ReadFile.

Możesz również zrobić to programowo po załadowaniu pliku do sieci 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();
});

Eksportowane porty i podgrafy

Jest też bardziej elegancki sposób, aby to zrobić, eksponując swój plik .fbp jako wykres w programie ComponentLoader firmy NoFlo, a następnie wchodząc w interakcję z nim podczas interakcji z dowolnym innym składnikiem.

Aby porty, którymi jesteś zainteresowany, były dostępne z zewnątrz, musisz to zrobić eksport im. W tym przypadku przynajmniej port ReadFile IN z wykresu. Spowoduje to zmianę definicji sieci na:

# 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)

(tak się składa, że ​​jest to dokładnie ten przykład, którego użyłem na eksportowanych portach w Definicja języka .fbp)

Aby udostępnić wykres jako komponent, musisz zapisać go w projekcie Node.js (konwencja jest zgodna z graphs/ podkatalogu) i zarejestruj go w package.json plik:

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

Teraz możesz traktować go jak każdy inny komponent. Na przykład:

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();
});

Jednym z powodów, dla których jest to preferowana metoda, jestże możesz tego używać nie tylko do wysyłania IIP, ale także do dołączania gniazd do eksportowanych portów wyjściowych i nasłuchiwania na nich zdarzeń. W ten sposób możesz łatwo wykorzystać dowolne wykresy NoFlo jako funkcje asynchroniczne w aplikacji JavaScript.