我想使用Node.JS设计一些机器人。以下是这些机器人的要求:
到目前为止我尝试了什么: 由于我是NodeJS的新手,我还没有能够准确找到解决这个问题的正确方法。
答案 0 :(得分:2)
javascript的异步性质意味着当每个“机器人”时都会出现这种情况。正在睡觉它没有阻止并导致其他机器人睡觉。例如,在此代码中:
'use strict';
var start = Date.now();
var printTime = function() {
console.log(Date.now() - start + 'ms');
};
setTimeout(function() {
printTime();
}, 500);
setTimeout(function() {
printTime();
}, 1000);
应打印(约):
500ms
1000ms
而不是:
500ms
1500ms
这样的事情应该可以正常工作:
'use strict';
var fetch = require('node-fetch');
// Each bot waits between 5 and 30 seconds
var minDelay = 5000;
var maxDelay = 30000;
var numBots = 10;
var botTask = function() {
fetch('http://somewhere.com/foo', { method: 'POST', body: 'a=1' });
};
var getDelay = function() {
return minDelay + Math.random() * (maxDelay - minDelay);
};
var runBot = function() {
setTimeout(function() {
botTask();
runBot();
}, getDelay());
};
for (var i = 0; i !== numBots; i++) {
runBot();
}
答案 1 :(得分:1)
这是一个非常简单的框架:
var bot = {
act: function() {
//make post request here
var delay = Math.random() * 500; /*set random delay to mimic human */
setTimeout(this.act.bind(this), delay);
}
}
var bots = [];
for (var i = 0; i < 10; i++) {
bots.push(Object.create(bot));
}
bots.forEach(function(bot) {
bot.act();
});
我们有一个主机器人模板,bot
变量。 bot.act
是一个发送POST请求的函数,然后在延迟后设置自身超时。其余的只是样板,在列表中添加10个机器人,并启动每个机器人。它真的那么简单......没有工作队列,没有异步并行......