为什么微软僵尸框架不可扩展?

集群后,它不能按预期工作,一次又一次地问我的名字。

我错过了什么吗?

这是我的微软bot框架的代码。

server.js

var worker = require('./worker'); var cluster = require('cluster'); var spawnWorker = function() { worker.createServer(); }; var createCluster = function() { if(cluster.isMaster) { var cpus = require('os').cpus().length; for(var i = 0; i < cpus; i++) { cluster.fork(); } cluster.on('online', function(wkr) { console.log('Worker started', wkr.process.pid); }); cluster.on('exit', function(wkr) { console.log('Worker died, respawing', wkr.process.pid); cluster.fork(); }); } else { spawnWorker(); } }; createCluster(); 

worker.js

 exports.createServer = function(){ var builder = require('botbuilder'); var connector = new builder.ConsoleConnector().listen(); var bot = new builder.UniversalBot(connector); bot.dialog('/', [ function (session) { builder.Prompts.text(session, process.pid+': Hi! What is your name?'); }, function (session, results) { session.send(process.pid+':Hello %s!', results.response); } ]); } 

产量

 $ node server.js Worker started 8540 Worker started 8068 Worker started 6020 Worker started 4244 8540: Hi! What is your name? abc 8068: Hi! What is your name? prq 6020: Hi! What is your name? lmn 4244: Hi! What is your name? xyz 

更多信息在这里 在这里输入图像描述

您正在使用您的Worker.js文件中的ConsoleConnector,它将所有僵尸聊天对话状态存储在内存中。 这意味着每个节点都有单独的对话状态副本,这在多节点体系结构中不起作用。 您需要使用使用BotFramework的ChatConnector将对话状态存储在您的机器人的一个中心位置,或者您必须将自定义的IBotStorage实现传递到UniversalBot。 该实现可以使用rediscaching或其他东西来集中所有的东西。