/ / Comenzando con noflo, ejecutándolo desde nodejs - node.js, noflo

Comenzando con noflo, ejecutándolo desde nodejs - node.js, noflo

Tengo un ejemplo simple de noflo ejecutándose de noflo. Pero no tengo suerte para averiguar cómo debería funcionar noflo con el nodo y otro código.

Al principio tenía este archivo 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

Lo intenté: noflo.loadFile(filepath, nodedir, function(graph)

Esto funciona y se imprime en la consola. Pero si omito la última línea en el fbp, eso alimenta el package.json parámetro, no encontré forma de ejecutar el gráfico.

¿Hay alguna guía sobre cómo usar noflo desde el código de nodejs y no desde la línea de comandos?

Respuestas

5 para la respuesta № 1

Normalmente, los componentes de NoFlo no hacen nada antes de recibir alguna entrada, en este caso, la ruta del archivo desde donde leer. Documentos del componente NoFlo:

Una instancia en ejecución de un componente en una red NoFlo se denomina proceso. Antes de que un proceso haya recibido datos, debe inerte, simplemente escuchando sus puertos de entrada. Los procesos que necesitan comenzar a hacer algo cuando se inicia una red deben activarse para hacerlo enviándoles un Paquete de información inicial.

La última línea de tu Definición de gráfico .fbp está enviando la cadena package.json al componente ReadFile.

También puede hacer esto mediante programación después de haber cargado el archivo en una red 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();
});

Puertos y subgrafos exportados

Ahora, también hay una forma más elegante de hacer esto, exponiendo su .fbp archivo como un gráfico en ComponentLoader de NoFlo y luego interactuar con él mientras interactúa con cualquier otro componente.

Para que los puertos que le interesan estén disponibles desde el exterior, debe exportar ellos. En este caso, al menos el puerto ReadFile IN del gráfico. Esto cambiaría la definición de su red a:

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

(Da la casualidad de que este es exactamente el ejemplo que estaba usando en los puertos exportados en el Definición de lenguaje .fbp)

Para que su gráfico esté disponible como un componente, debe guardarlo dentro de su proyecto Node.js (la convención es la graphs/ subdirectorio) y registrarlo en el package.json archivo:

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

Ahora puede tratarlo como cualquier otro componente. Por ejemplo:

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

Una de las razones por las que este es el método preferido esque no solo puede usar esto para enviar IIP, sino también para conectar sockets a los puertos de salida exportados y escuchar eventos en ellos. De esta manera, puede utilizar fácilmente cualquier gráfico NoFlo como funciones asincrónicas en su aplicación JavaScript.