如何在节点应用程序中嵌入多个节点红色实例
How to embed multiple instances of node-red in node app
此处的 Node-red 文档提供了有关如何在 nodejs 应用程序中嵌入单个 node-red 应用程序的信息 - http://nodered.org/docs/embedding
我们希望我们站点的用户在不同的端口上拥有自己的节点红色,以进行一些自定义编程。是否可以在一个 nodejs 应用程序中嵌入多个 node-red 应用程序?
我尝试通过使用不同端口更改每个调用的设置来重复相同的嵌入步骤,但只创建了一次。第一次,根据设置创建一个 node-red 实例。下次我们打电话时,我们会得到正在使用的端口。我认为这与节点需要做缓存有关...这个问题有什么解决方法吗?
不,目前 Node-RED 没有多用户功能,也无法在一个进程中实例化多个实例。
您必须运行 为每个用户分开应用程序实例。看看 FRED 这样的例子。 运行s 单独的实例并代理它们以使集成看起来都在同一个 port/domain
上
如果您有兴趣,我创建了一个允许此功能的 node-red 项目的分支。
这是您启动它的方式:
var http = require('http');
var express = require("express");
var RED = require("node-red")();
var RED2 = require("node-red")();
// Create an Express app
var app = express();
// Add a simple route for static content served from 'public'
app.use("/",express.static("public"));
// Create a server
var server = http.createServer(app);
// Create the settings object - see default settings.js file for other options
var settings = {
httpAdminRoot:"/red1",
httpNodeRoot: "/api",
userDir:"./hhh",
functionGlobalContext: { } // enables global context
};
// Initialise the runtime with a server and settings
RED.init(server,settings);
console.log(RED2.settings === RED.settings, 888, RED2.settings.userSettings);
// Serve the editor UI from /red
app.use(settings.httpAdminRoot,RED.httpAdmin);
// Serve the http nodes UI from /api
app.use(settings.httpNodeRoot,RED.httpNode);
server.listen(8005);
// Start the runtime
RED.start();
var app2 = express();
app2.use("/",express.static("public"));
var server2 = http.createServer(app2);
var settings2 = {
httpAdminRoot:"/red2",
httpNodeRoot: "/api",
userDir:"./hhhh",
functionGlobalContext: { }
};
RED2.init(server2,settings2);
app2.use(settings2.httpAdminRoot,RED2.httpAdmin);
app2.use(settings2.httpNodeRoot,RED2.httpNode);
RED2.start();
server2.listen(8006);
console.log(RED.settings.httpAdminRoot);
console.log(RED2.settings.httpAdminRoot);
console.log(RED2.settings === RED.settings);
同样,在同一个端口上工作。但要确保使用不同的路径。
此处的 Node-red 文档提供了有关如何在 nodejs 应用程序中嵌入单个 node-red 应用程序的信息 - http://nodered.org/docs/embedding
我们希望我们站点的用户在不同的端口上拥有自己的节点红色,以进行一些自定义编程。是否可以在一个 nodejs 应用程序中嵌入多个 node-red 应用程序?
我尝试通过使用不同端口更改每个调用的设置来重复相同的嵌入步骤,但只创建了一次。第一次,根据设置创建一个 node-red 实例。下次我们打电话时,我们会得到正在使用的端口。我认为这与节点需要做缓存有关...这个问题有什么解决方法吗?
不,目前 Node-RED 没有多用户功能,也无法在一个进程中实例化多个实例。
您必须运行 为每个用户分开应用程序实例。看看 FRED 这样的例子。 运行s 单独的实例并代理它们以使集成看起来都在同一个 port/domain
上如果您有兴趣,我创建了一个允许此功能的 node-red 项目的分支。
这是您启动它的方式:
var http = require('http');
var express = require("express");
var RED = require("node-red")();
var RED2 = require("node-red")();
// Create an Express app
var app = express();
// Add a simple route for static content served from 'public'
app.use("/",express.static("public"));
// Create a server
var server = http.createServer(app);
// Create the settings object - see default settings.js file for other options
var settings = {
httpAdminRoot:"/red1",
httpNodeRoot: "/api",
userDir:"./hhh",
functionGlobalContext: { } // enables global context
};
// Initialise the runtime with a server and settings
RED.init(server,settings);
console.log(RED2.settings === RED.settings, 888, RED2.settings.userSettings);
// Serve the editor UI from /red
app.use(settings.httpAdminRoot,RED.httpAdmin);
// Serve the http nodes UI from /api
app.use(settings.httpNodeRoot,RED.httpNode);
server.listen(8005);
// Start the runtime
RED.start();
var app2 = express();
app2.use("/",express.static("public"));
var server2 = http.createServer(app2);
var settings2 = {
httpAdminRoot:"/red2",
httpNodeRoot: "/api",
userDir:"./hhhh",
functionGlobalContext: { }
};
RED2.init(server2,settings2);
app2.use(settings2.httpAdminRoot,RED2.httpAdmin);
app2.use(settings2.httpNodeRoot,RED2.httpNode);
RED2.start();
server2.listen(8006);
console.log(RED.settings.httpAdminRoot);
console.log(RED2.settings.httpAdminRoot);
console.log(RED2.settings === RED.settings);
同样,在同一个端口上工作。但要确保使用不同的路径。