2016-08-29 9 views
2

Node-красная документация здесь дает информацию о том, как вставлять один узел-красный приложения внутри nodejs приложения - http://nodered.org/docs/embeddingКак встроить несколько экземпляров узел-красный в приложении узла

Мы хотели пользователь нашего сайта, чтобы их собственный узел-красный на разных портах для некоторых пользовательских программ. Возможно ли внедрить несколько приложений с узловым краем в приложение nodejs?

Я попытался повторить те же шаги для внедрения, изменив настройки каждого вызова с помощью другого порта, но только один раз, когда он создан. В первый раз создается узел-красный экземпляр на основе настроек. В следующий раз, когда мы позвоним, мы используем порт. Я предполагаю, что это имеет какое-то отношение к узлу, нужно делать кеширование и все ... Любое обходное решение для этой проблемы?

ответ

0

Нет, в настоящее время Node-RED не имеет многопользовательских возможностей и не может создавать экземпляры нескольких экземпляров в одном процессе.

Вам нужно будет запускать отдельные экземпляры приложения для каждого пользователя. Посмотрите на что-то вроде FRED для примера. Это запускает отдельные экземпляры и проксирует их, чтобы интеграция выглядела так, как будто все они находятся на одном и том же порту/домене.

+0

Спасибо. Мы попробовали руку при создании дочерних процессов с узловым краем, используя exec из node-js с измененными настройками. Даже мысль о вызове скрипта для запуска докеров. Слишком громоздко. Поэтому решил попробовать FRED, даже если его служба в облаке. – rmvpaps

0

Если вам интересно, я создал вилку проекта с красным узлом, разрешающего эту функцию.

это, как вы бы начать его:

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); 

также работает на том же порту. но обязательно используйте разные пути.

https://github.com/aryeharmon/node-red