Node-RED学习-自定义webSocket服务端节点
文章目录
-
- 简介:
- 本地使用搭建:
- 常见场景构建:
- 注意点:
- 自定义webSocket服务端节点
- 相关代码参考
- 控制页面按钮权限设置/内容调整
- 总结
简介:
Low-code programming for event-driven applications.
事件驱动应用程序的低代码编程。
Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一个“流”(Flows)。
Node-RED最初是IBM在2013年末开发的一个开源项目,以满足他们快速连接硬件和设备到Web服务和其他软件的需求——作为物联网的一种粘合剂,它很快发展成为一种通用的物联网编程工具。重要的是,Node-RED已经迅速形成一个重要的、不断增长的用户基础和一个活跃的开发人员社区,他们正在开发新的节点,同时允许程序员复用Node-RED代码来完成各种各样的任务。
虽然Node-RED 最初是用来处理物联网的应用,也就是说,它与现实世界交互和控制设备,随着它的发展,它已经成为一个较为开放的物联网开发工具。
官网地址:https://nodered.org
github地址: https://github.com/node-red/node-red
gitee地址:https://gitee.com/mirrors/node-red
节点搜索地址:https://www.npmjs.com/search?q=node-red
中文文档地址:https://nodered.17coding.net/docs/
本地使用搭建:
git clone https://github.com/node-red/node-red.gitcd node-rednpm installnpm run buildnpm start
常见场景构建:
1模拟jielink平台接口数据处理

2模拟大屏数据展示dashboard


注意点:
多个http节点相互连接时前一个节点的数据会影响后面节点的请求,现象是一直显示是请求中然后超时之类的
注意清空请求头信息,对应节点说明也有提示
msg.headers={}


自定义webSocket服务端节点
不清楚相关内容可以参考中文文档地址:https://nodered.17coding.net/docs/
自定义节点模块内容
创建步骤
对应目录下创建mynode文件夹,新建html和对应js文件

切换到对应目录下执行npm init生成package.json文件

然后切回原来目录执行npm install 对应目录路径

使用npm start启动可以发现自定义节点已经ok了
相关代码参考
websocket-server.html
RED.nodes.registerType(\'websocket-server\', { category: \'network\', color: \'#a6bbcf\', defaults: { name: {value: \"\"}, port: {value:\"\"} }, inputs: 1, outputs: 1, icon: \'bridge.png\', label: function () { return this.name || \'websocket-server\'; } }); 当前节点主要功能是构建一个本地websocket服务端
websocket-server.js
module.exports = function (RED) { function WebSocketServerNode(config) { RED.nodes.createNode(this, config); var node = this; // 创建WebSocket服务器 const WebSocket = require(\'ws\'); if (isNumericInRange(config.port, 1000, 9999)) { this.status({fill: \"green\", shape: \"dot\", text: \"active\"}); } else { this.status({fill: \"red\", shape: \"ring\", text: \"inactive\"}); return } const wss = new WebSocket.Server({port: config.port}); wss.on(\'connection\', function connection(ws) { node.warn(\'WebSocket client connected\'); ws.on(\'message\', function incoming(message) { //node.warn(\'Received message: \' + message); // 处理接收到的消息 // ... // 可以通过ws.send来发送消息给客户端 ws.send(\"这是来自服务端的响应消息:\"+message.toString()) var msg = { \"payload\": message.toString() } node.send(msg) }); ws.on(\'close\', function close() { node.log(\'WebSocket client disconnected\'); }); }); this.on(\'close\', function () { // 关闭服务器 wss.close(); }); } function isNumericInRange(str, min, max) { // 尝试将字符串转换为数字 const num = Number(str); // 检查转换后的值是否为NaN,NaN表示“不是一个数字” if (isNaN(num)) { return false; } // 检查数字是否在指定的范围内 // 注意:Number.isInteger(num) 可以用来检查num是否为整数,但这一步是可选的,取决于你是否只接受整数 return num >= min && num <= max; } RED.nodes.registerType(\"websocket-server\", WebSocketServerNode);};
控制页面按钮权限设置/内容调整


总结
这次主要是学习了解node-red的基本操作和使用,有感兴趣的可以加入一起学习
https://t.zsxq.com/7AspS,后面有时间再学习一些更深入的内容。


