gpt4 book ai didi

javascript - 使用 Node.JS 设计机器人,以随机超时和通用例程运行

转载 作者:行者123 更新时间:2023-11-30 12:04:49 26 4
gpt4 key购买 nike

我想使用 Node.JS 设计一些机器人。以下是这些机器人的要求:

  • 最多有 10 个“机器人”。我不确定如何在 NodeJS 中执行此操作,考虑到它的单线程,我假设如果有 10 个 worker 异步项目,将代表 10“机器人”?
  • 机器人执行基本的 REST 任务,例如向远程服务器发送 POST。假设每个 POST 都是成功的(或者假设我们不关心是否有失败)。虽然远程服务器相同且功能相同(POST),但参数可能有所不同,每个 bot 都会提供可变参数,例如 POST 的有效负载
  • 机器人应该在某种程度上模仿人类行为,在执行任务之前随机休眠 k 秒。然后它在执行另一个任务之前将自己排队等待另一个随机的 k 秒。这增加了我无法理解的复杂程度——如果我使用像 setTimeout 或 setInterval 这样的 sleep /超时函数,将有 10 个这样的工作人员并行 sleep 或串行 sleep 。如果他们连续 sleep ,那么我就没有 10 个机器人,而是有 10 个连续工作人员按 sleep 顺序排队!

到目前为止我尝试过的:由于我是 NodeJS 的新手,我一直无法准确找到处理这个问题的正确方法。

  • 我调查了 beanstalkd这是一个工作队列,但看起来是连续的,消费者服务将按顺序订购商品
  • 我目前正在评估 async.parallel但并行性似乎是一个“障碍”,只有在所有并行作业完成要并行执行的功能后,所有并行作业才会继续进行下一次迭代,但在我的例子中,例如,bot 3重新排队并在其第二次迭代中休眠,即使机器人 7 在其第一次迭代中处于长时间休眠状态

最佳答案

javascript 的异步特性意味着当每个“机器人”处于 sleep 状态时,它不会阻塞并导致其他机器人进入休眠状态。例如,在这段代码中:

'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();
}

关于javascript - 使用 Node.JS 设计机器人,以随机超时和通用例程运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35545317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com