Итак, я запускаю несколько чат-ботов через child.fork(../bots/config1.js)
и так далее. Я хочу сделать веб-интерфейс для указанных ботов чата, чтобы отобразить некоторые данные. Поскольку они являются дочерними процессами, они не могут получить доступ к одному и тому же порту. Сейчас я делаю переадресацию, когда я запускаю бота. Например, в моем запуске файла, это выглядит примерно так: Получить маршруты через сообщение
var child = require('child_process');
var express = require('express');
var web = express();
var basehref = 'http://bot.example.com';
var configs = {
'bot1':{ port:3001,file:'bot1.js',route:'bot1' },
'bot2':{ port:3001,file:'bot2.js',route:'bot2' }
}
for (var bot in config) {
var cfg = config[bot];
child.fork('bots/'+cfg.file);
web.get('/'+cfg.route,function(req,res){
res.redirect(basehref+':'+cfg.port+'/'+cfg.route);
});
}
И у меня есть боты начать свой собственный экспресс-сервер на cfg.port
для обработки этого запроса. Но он чувствует себя липким.
Это маршрут в файле бота:
web.get('/'+cfg.route,function(req,res){
var data = { cfg:cfg,local:local,users:users,modules:{} };
for (var i=0;i < loadedModules.length;i++){
var module = loadedModules[i];
data.modules[module.type] = {
settings:module.settings,
toggles:moduletoggles
}
}
res.render('views/routeIndex',data);
});
Так мне было интересно, есть ли способ, которым я мог бы отправить данные в дочерний процесс, а затем вернуть данные в оболочку и сделать там, где хранятся все боты в одном и том же порту.
Я уже пробовал использовать кластер, но маршруты сложны в бот-файле, и поэтому они не могут быть определены до того, как бот будет полностью работоспособен, и я потратил несколько часов, прежде чем сдаваться.
Вы можете отправлять сообщения между процессами fork и родительским процессом. Пример и документы: http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle – damphat
Я знаю, что я уже делаю так, что бот может перезагрузиться. Он отправляет сообщение обертке, и обертка убивает процесс и перезагружает его. Но как я могу отправить данные INSIDE по маршруту, а затем получить данные из ('message') для рендеринга? –