2016-10-19 9 views
1

クラスタリングした後、期待通りに機能せず、何度も何度も名前を聞いてください。Microsoftのボットフレームワークはスケーラブルではありませんか?

何か不足していますか?

ここは私のMicrosoftボットフレームワークのコードです。

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 

詳しい情報here enter image description here

答えて

6

あなたはWorker.jsファイル内でConsoleConnectorを使用しています。これは、すべてのボットの会話追跡状態をメモリに保存しています。つまり、各ノードには、マルチノードアーキテクチャでは機能しない会話状態の別のコピーがあります。 BotFrameworkを使用するChatConnectorを使用してボットの中央の会話状態を保存するか、カスタムIBotStorage実装をUniversalBotに渡す必要があります。この実装では、すべてを集中管理するためにRedisキャッシュなどを使用できます。

関連する問題