nodejs 中的机器人大师

Bot master in nodejs

我目前正在做一些在线服务,但我不知道如何正确地做一件事。我需要的是由一个 "master" 控制的 nodejs 上的一堆机器人(一个代码的许多实例)。主人应该切换机器人on/off,做一些监控并向这些机器人发送任务。我看到两种组织代码的方法:

  1. 主人和机器人的代码位于同一个文件中,机器人的实例 被推入数组(即 var bot_instances = []);
  2. 硕士和 bot 的代码位于不同的文件中(即 master.js 和 bot.js), 每个机器人实例都是子进程。

哪种方式合适,为什么?

这个主题可以涉及很多内容,所以我暂时保持简单:

使用#2 并创建作业队列数据结构实现,以及空闲的等待池children。

  • 通过队列将任务从 master 分配给 bot。
  • Master 应该包含作业调度实现。
  • 利用 child 进程消息来更新 master 的 child 状态 (https://nodejs.org/api/child_process.html#child_process_event_message)。
  • 每当 child 可用时,从队列中调度下一个作业。如果没有剩余的 Job,维护一个可用 Child 的池(或者甚至更好,只需将它们关闭,直到您再次需要它们以节省系统资源)。

为什么要分开代码:如果您的主代码还包含机器人代码,那么它会变得相当夸张。随着项目的发展,最好保持这种模块化。