Node-Red supporta flussi multi-richiesta (ad es. Sessioni)?


8

Questa settimana ho fatto un breve test su Node-Red . Non mi è chiaro se supporta flussi che comprendono più di una richiesta. Node-Red ha un modello di richiesta per flusso o sessione per flusso?

Avendo lavorato con strumenti di programmazione basati sul flusso di dati per Business Process Modeling (webMethods e Tibco), vedo una delle loro caratteristiche chiave è la capacità di modellare sessioni e flussi di lavoro. Questi strumenti sono, tuttavia, piuttosto grandi ai fini della maggior parte dei progetti IoT, quindi sarebbe fantastico se si potesse realizzare qualcosa di simile con Node-Red.

Una domanda di follow-up, nel caso in cui il nodo-Red non supporta questo, è se ci sono alcuni semplici strumenti che fanno sostenere modellazione grafica della sessione scorre?



1
@MatsK Non sono sicuro. Se segui questo link vedrai un flusso di esempio, un po 'inventato, da uno strumento BPM. Osservando la parte del flusso "Venditore di pizza", vengono visualizzati tre eventi / richieste di input: l'ordine ricevuto, una richiesta di stato (dov'è la mia pizza?) E il pagamento. Le richieste servono per far avanzare il flusso che ha un ciclo di vita indipendente da ogni singola richiesta.
Chris Steinbach,

1
@MatsK Un esempio più rilevante per l'IoT potrebbe essere, ad esempio, un rilevatore di fumo che avvia un flusso quando viene rilevato il fumo. La prima azione (nodo) nel flusso sarebbe quella di emettere un segnale acustico, ma in seguito il flusso può andare in diversi modi. Se entro un determinato tempo viene ricevuta una richiesta dell'utente per annullare l'allarme, l'allarme acustico viene interrotto e il flusso termina. Se non viene ricevuta alcuna richiesta di annullamento o viene attivato un altro rilevatore di fumo, vengono intraprese ulteriori azioni (ad es. Proprietario dell'SMS, chiamare i servizi di emergenza).
Chris Steinbach,

Risposte:


3

La risposta è no e sì.

I flussi in rosso-nodo sono piuttosto statici, non esiste l'idea di creare un'istanza di un flusso quando arrivano le prime richieste in modo tale che si possa avere un'istanza di un flusso per richiesta.

Inoltre, non esiste una nozione integrata di una sessione che consenta di associare i messaggi che fluiscono attraverso i flussi a una sessione.

Tuttavia, puoi relativamente facilmente costruire queste cose da solo. Nodo-rosso fornisce una nozione di flusso e stato globale, a cui si accede utilizzando gli oggetti flowe global, vedere https://nodered.org/docs/writing-functions#storing-data . Quello che faresti è inviare un cookie ai client e quindi associare esplicitamente una richiesta in arrivo allo stato globale o di flusso salvato. È quindi possibile scrivere codice "a conoscenza della sessione" in base allo stato della sessione salvata. Funziona bene nei nodi funzione, ma colpirai alcuni problemi con i nodi integrati che fanno cose come limite di velocità o dividi e unisci i messaggi perché questi non sono generalmente consapevoli della nozione di sessione.

Nell'esempio della pizza manterresti lo stato di un ordine nel flusso o nel contesto globale e accederai allo stato dell'ordine appropriato in base al valore del cookie.


5

La risposta breve è , almeno secondo questa richiesta di funzionalità :

Definire la convenzione per le sessioni 'stateful' # 63

Questa richiesta viene chiusa con un commit che indica che viene aggiunto un nodo socket Web, che si basa su un token di sessione.


Questa è una funzione utile e rilevante per ciò che mi riguarda in una certa misura, ma non esattamente la stessa. Quello che intendo per sessione è in realtà un'istanza avviata di un flusso definito (o modello nel mondo BPM). La durata di questo flusso istanziato non è collegata a nessuna singola richiesta o sessione di trasporto. Pensa a un diagramma di transizione di stato, se vuoi, anche se meno formalizzato nelle implementazioni che ho visto.
Chris Steinbach,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.