2023-07-21-nodeRed-源码分析10-从node.send到'input'回调

1. 功能概述#

Node-RED 中消息的流转是通过连接不同的节点来完成的。当一个节点接收到消息时,它会将其处理后发送到下一个节点。下一个节点再对该消息进行处理,最终将结果传递到下一个节点,以此类推,直至消息到达最终节点完成处理。

在 Node-RED 中,消息可由源节点(如 mqtt input node、http input node)生成,也可由其他节点产生(如 function node、template node 等)。对于每一个消息,Node-RED 需要确定它应该发送到哪个节点。这个过程是基于节点之间的连接来进行的。

连接可以直接从一个节点到另一个节点,也可以有中间节点传输。在流程执行过程中,Node-RED 会根据流程图的连线信息,按照一定的顺序发送消息,以达到预期的流程目标。

2. 涉及文件#

阅读更多

2023-07-12-nodeRed-源码分析2-程序核心lib/red.js分析

1. 功能概述#

  • 以库的形式,提供 NodeRed 的所有核心功能
  • 提供了三个对外接口:init、start、stop
    • init:初始化 runtime(一个全局运行时对象)、api(提供 restful 接口) ,完成参数的传递及绑定
    • start:启动 runtime 和 api
    • stop: 停止 runtime 和 api
  • 导出了以下变量, log、util、nodes、events、hooks、settings、version、httpAdmin、httpNode、httpServer、runtime、auth

2. 所依赖的三方库#

  • path
  • semver

3. 文件域变量#

阅读更多

2023-07-12-nodeRed-源码分析3-程序流引擎入口分析

1. 功能概述#

  • 以库的形式,提供 Nodered 的核心流引擎功能。
  • 包含 api、flows、library、nodes、storage 模块
  • 提供了三个对外接口:init、start、stop
    • init:初始化 settings 对象,nodeApp ,adminApp,adminApi,redNodes,externalAPI(api)
    • start :初始化 i18n、storage、library,启动 settings,启动 redNodes, 加载上下文,加载流,启动流
    • stop: 停止流、关闭上下文

2. 所依赖的三方库#

  • express
  • path
  • fs
  • os

3. 文件域变量#

阅读更多

2023-07-10-nodeRed-源码分析1-程序入口red.js分析

1. 功能概述#

  • 加载所需的应用程序、库文件和参数文件,以便它们可以在运行时被调用
  • 解析命令参数,使用不同的选项和功能
  • 根据用户或系统的设置来配置自身,例如文件路径、日志级别等。
  • 记录运行时发生的错误和事件,以便更容易诊断和解决问题
  • 配置并创建 webserver 对象,并将请求委托给 express 实例
  • 用 server 对象和配置参数初始化 RED 库
  • 启动 RED 核心模块,并启动 webserver
  • 提供退出功能,确保程序正确关闭并释资源、保存数据。

2. 所依赖的三方库#

  • http
  • https
  • util
  • express
  • crypto
  • bcrypt
  • nopt

3. 文件域变量#

阅读更多

2022-03-25-带着问题看源码8-NodeRed中的Library模块

1. 此模块的意义#

NodeRed Library 模块是一组前后端配合使用的模块。它可将运行数据序列化到磁盘,实现数据共享。

2. NodeRed 此模块功能#

当前 NodeRed 提供了两个默认的 Library 模块:example 和 local,分别实现了例子文件的读写和流程导入导出。前端提供操作界面,通过 NodeRed 提供的 Restful 接口调用后端,后端根据参数实现功能。

阅读更多

2022-03-21-带着问题看源码7-NodeRed中的context模块

1. 此模块的意义#

NodeRed context 模块是运行期做数据保存及共享的一种机制。当节点间有相同内容时,可以考虑将相同的内容放入 context 以实现共享,既减少了空间,也有利于修改。

2. NodeRed 此模块功能#

context 有三类:global、flow、node,其中 global 是随着 context 模块初始化时创建,全局唯一;flow context 以 flowId 为标识,为所有具有相同 flowId 的节点做记录;node context 以 flow:id 为标识。三者作用域不相同:全局、流、节点,不同流 context 数据不共享,不同节点 context 数据不共享。

阅读更多

2022-03-15-带着问题看源码6-NodeRed中的日志模块

NodeRed 日志模块是基础的模块,负责运行期的信息打印,支持日志等级,同时提供了扩展机制,支持远程打印,打印另存等功能

1. 日志系统的意义#

让我们回到计算机世界的远古时期或者我们刚刚接触计算机世界的时期,那个时候我们有两种调试程序的办法:1)单步调试,一步步地跟踪,查看代码中变量的值。2) 是 printf 大法 —— 在特定的地方打印日志, 通过日志的输出,帮助快速定位。
单步调试方法费时费力,但能准确定位问题。printf 大法简单粗暴,需要尝试,大部分情况能快速找到问题。单步调试和 printf 方法搭配使用,相得益彰。但是单步调试止步于 gdb 等调试工具,而 printf 大法最终发展出了一系列的日志系统。原因就在于单步调试在程序员调试才能用,而 printf 大法可以在调试和生产线上都能用,并且输出的日志被各方面的人利用和解读。

printf 大法是很简陋的。在调试过程中,有可能日志打到很细粒度,比如每条数据的第三个字段是什么都打印出来了,但是真正运行又要把这些细粒度的日志删除。等到下次调试,我们又要知道每条数据的第三个字段是什么了。为此,我们希望日志打印是智能:调试或者线上出问题的时候,各种细粒度的日志全部打印出来,正常运行的时候输出一些最简单的信息就可以了。

阅读更多

2022-03-11-带着问题看源码5-NodeRed系统数据存储

NodeRed 系统相关的配置文件会以 JONS 格式存储在本地,同时也提供了插件机制实现系统数据的自定义存储,本文从 Storage 模块出发,从源码分析下如何以插件形式实现自定义存储,也对这种方式的可能的用途进行分析。

1. NodeRed 系统数据有哪些#

文件名称 说明
package.json nodered npm 信息
.sessions.json 维护会话信息,每一个建立的会话都会记录
flows_[hostname].json NodeRed 流程文件
flows_[hostname]_cred.json 用以保存节点中以.credentials 保存的信息,加密与否可使用配置文件中 credentialSecret 参数配置
.config.runtime.json 运行时配置
.config.users.json 用户配置
.config.nodes.json 节点配置
.config.projects.json Git 配置

2. NodeRed 中系统数据存储机制#

阅读更多

2022-03-09-带着问题看源码4-NodeRed中消息路由实现

NodeRed 提供了一个 Hook 模块,此模块向消息生命周期的节点注册,控制消息的流转。

1. 消息路由是什么? 有几种实现方式 ?#

消息路由即通过路由规则动态规划消息的传输路径,使消息按照过滤条件,从消息源路由到目标节点。通过消息路由,可实现对数据路由的灵活控制和提高数据安全性。

主要有两种方式:

阅读更多

2021-07-12-带着问题看源码3-NodeRed的节点模块如何被加载与使用

NodeRed中的节点模块由一个个软件包组成,NodeRed使用了Node的包管理。

1. 包管理#

包管理器又称软件包管理系统,它是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。

通常在代码管理平台,追踪代码修正与版本的迭代;包管理平台负责安装包的管理与维护。

阅读更多