Node.js 节点红色:创建服务器并共享输入
我正在尝试为node Red创建一个新节点。基本上,它是一个udp侦听套接字,应通过配置节点建立,并将所有传入消息传递给专用节点进行处理。 这是我的基本知识:Node.js 节点红色:创建服务器并共享输入,node.js,sockets,node-red,Node.js,Sockets,Node Red,我正在尝试为node Red创建一个新节点。基本上,它是一个udp侦听套接字,应通过配置节点建立,并将所有传入消息传递给专用节点进行处理。 这是我的基本知识: function udpServer(n) { RED.nodes.createNode(this, n); this.addr = n.host; this.port = n.port; var node = this; var socket = dgram.createSocket('udp
function udpServer(n) {
RED.nodes.createNode(this, n);
this.addr = n.host;
this.port = n.port;
var node = this;
var socket = dgram.createSocket('udp4');
socket.on('listening', function () {
var address = socket.address();
logInfo('UDP Server listening on ' + address.address + ":" + address.port);
});
socket.on('message', function (message, remote) {
var bb = new ByteBuffer.fromBinary(message,1,0);
var CoEdata = decodeCoE(bb);
if (CoEdata.type == 'digital') { //handle digital output
// pass to digital handling node
}
else if (CoEdata.type == 'analogue'){ //handle analogue output
// pass to analogue handling node
}
});
socket.on("error", function (err) {
logError("Socket error: " + err);
socket.close();
});
socket.bind({
address: node.addr,
port: node.port,
exclusive: true
});
node.on("close", function(done) {
socket.close();
});
}
RED.nodes.registerType("myServernode", udpServer);
对于处理节点:
function ProcessAnalog(n) {
RED.nodes.createNode(this, n);
var node = this;
this.serverConfig = RED.nodes.getNode(this.server);
this.channel = n.channel;
// how do I get the server's message here?
}
RED.nodes.registerType("process-analogue-in", ProcessAnalog);
我不知道如何将套接字接收到的消息传递给数量可变的处理节点,即多个处理节点应在服务器实例上共享
==编辑以获得更清晰的信息=====
我想开发一组新的节点:
一个服务器节点:
- 使用创建UDP侦听套接字
- 管理套接字连接(关闭事件、错误等)
- 接收具有一到多个不同数据通道的数据包
- 处理节点应共享服务器节点已建立的相同连接
- 处理节点应处理服务器发出的消息
- 节点Red flow可能会使用与服务器数据包中的通道数量相同的处理节点
据我所知,我通过
this.serverConfig=RED.nodes.getNode(this.server)使连接可用代码>但我无法确定如何将此连接接收到的数据传递到使用此连接的节点。节点不知道它连接到哪个节点
从第一个节点可以做的最好的事情是有两个输出,并向其中一个发送数字,向另一个发送模拟
您可以通过将数组传递给节点.send()
函数来完成此操作
例如
具有接收消息的节点需要为input
e、 g
所有这些都记录在红色节点上
另一个选项是,如果udpServer
节点是一个配置节点,那么您需要实现自己的侦听器,最好的选择是看起来像核心中的MQTT节点,例如池连接节点不知道它连接到下游的节点
从第一个节点可以做的最好的事情是有两个输出,并向其中一个发送数字,向另一个发送模拟
您可以通过将数组传递给节点.send()
函数来完成此操作
例如
具有接收消息的节点需要为input
e、 g
所有这些都记录在红色节点上
另一个选项是,如果udpServer
节点是config节点,那么您需要实现自己的侦听器,最好的选择是在核心中使用类似MQTT节点的连接池示例非常感谢您的回答。我想我对我最初的问题不够精确,因为我想实现一些不同的目标。为了更清楚(我希望如此),我已经编辑了我的初始问题,以便适合我描述的第二个选项,您应该查看核心节点中的MQTT节点。非常感谢您的回答。我想我对我最初的问题不够精确,因为我想实现一些不同的目标。为了更清楚(我希望如此),我已经编辑了我的初始问题,以便适合我描述的第二个选项,您应该查看核心节点中的MQTT节点
//this sends output to just the first output
node.sent([msg,null]);
//this sends output to just the second output
node.send([null,msg]);
node.on('input', function(msg) {
...
});