Node-Red prend-il en charge les flux multi-requêtes (c'est-à-dire les sessions)?


8

J'ai donné à Node-Red un court essai cette semaine. Il n'est pas clair pour moi s'il prend en charge des flux qui englobent plus d'une demande. Node-Red a-t-il un modèle de demande par flux ou de session par flux?

Ayant travaillé avec des outils de programmation basés sur les flux de données pour la modélisation des processus métier (webMethods et Tibco), je vois que l'une de leurs principales caractéristiques est la capacité de modéliser des sessions et des workflows. Ces outils sont cependant assez volumineux pour la plupart des projets IoT, il serait donc formidable que quelque chose de similaire puisse être accompli avec Node-Red.

Une question de suivi, au cas où Node-Red ne prend pas en charge cela, est de savoir s'il existe des outils simples qui prennent en charge la modélisation graphique des flux de session?



1
@MatsK Pas sûr. Si vous suivez ce lien, vous verrez un exemple de flux quelque peu artificiel d'un outil BPM. En regardant la partie "Vendeur de pizza" du flux, vous voyez trois événements / demandes d'entrée: la commande reçue, une demande d'état (où est ma pizza?) Et le paiement. Les demandes servent à faire avancer le flux dont le cycle de vie est indépendant de toute demande unique.
Chris Steinbach

1
@MatsK Un exemple plus pertinent pour l'IoT serait, par exemple, un détecteur de fumée qui commence un flux lorsque de la fumée est détectée. La première action (nœud) dans le flux serait de déclencher une alarme sonore, mais après cela, le flux peut prendre plusieurs directions différentes. Si une demande de l'utilisateur est reçue dans un délai donné pour annuler l'alarme, l'alarme sonore est arrêtée et le flux se termine. Si aucune demande d'annulation n'est reçue ou si un autre détecteur de fumée se déclenche, d'autres mesures sont prises (par exemple, propriétaire du SMS, appeler les services d'urgence).
Chris Steinbach

Réponses:


3

La réponse est non et oui.

Les flux en noeud rouge sont assez statiques, il n'y a aucune notion d'instanciation d'un flux lorsque les premières demandes arrivent de telle sorte que vous pourriez avoir une instance d'un flux par demande.

Il n'y a pas non plus de notion intégrée de session qui vous permettrait d'associer des messages traversant des flux à une session.

Cependant, vous pouvez relativement facilement construire ces choses vous-même. Node-red fournit une notion de flux et d'état global, accessible à l'aide des objets flowet global, voir https://nodered.org/docs/writing-functions#storing-data . Ce que vous feriez serait d'envoyer un cookie aux clients, puis d'associer explicitement une demande entrante à un état global ou de flux enregistré. Vous pouvez ensuite écrire du code "compatible avec la session" en fonction de l'état de session enregistré. Cela fonctionne bien dans les nœuds de fonction, mais vous rencontrerez des problèmes avec les nœuds intégrés qui font des choses comme la limite de débit ou les messages de fractionnement et de fusion car ils ne sont généralement pas conscients de la notion de session.

Dans l'exemple de pizza, vous maintenez l'état d'une commande dans le flux ou le contexte global et vous accédez à l'état de la commande appropriée en fonction de la valeur du cookie.


5

La réponse courte est oui , au moins en fonction de cette demande de fonctionnalité :

Définir la convention pour les sessions avec état # 63

Cette demande est clôturée par une validation indiquant qu'un nœud de socket Web est ajouté, basé sur un jeton de session.


C'est une fonctionnalité utile et pertinente dans une certaine mesure, mais pas exactement la même chose. Ce que je veux dire par session est vraiment une instance démarrée d'un flux défini, (ou modèle dans le monde BPM). La durée de vie de ce flux instancié n'est liée à aucune requête ou session de transport unique. Pensez-y comme un diagramme de transition d'état si vous le souhaitez, bien que moins formalisé dans les implémentations que j'ai vues.
Chris Steinbach
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.