nodejs 中的机器人大师
Bot master in nodejs
我目前正在做一些在线服务,但我不知道如何正确地做一件事。我需要的是由一个 "master" 控制的 nodejs 上的一堆机器人(一个代码的许多实例)。主人应该切换机器人on/off,做一些监控并向这些机器人发送任务。我看到两种组织代码的方法:
- 主人和机器人的代码位于同一个文件中,机器人的实例
被推入数组(即
var bot_instances = []
);
- 硕士和
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 的池(或者甚至更好,只需将它们关闭,直到您再次需要它们以节省系统资源)。
为什么要分开代码:如果您的主代码还包含机器人代码,那么它会变得相当夸张。随着项目的发展,最好保持这种模块化。
我目前正在做一些在线服务,但我不知道如何正确地做一件事。我需要的是由一个 "master" 控制的 nodejs 上的一堆机器人(一个代码的许多实例)。主人应该切换机器人on/off,做一些监控并向这些机器人发送任务。我看到两种组织代码的方法:
- 主人和机器人的代码位于同一个文件中,机器人的实例
被推入数组(即
var bot_instances = []
); - 硕士和 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 的池(或者甚至更好,只需将它们关闭,直到您再次需要它们以节省系统资源)。
为什么要分开代码:如果您的主代码还包含机器人代码,那么它会变得相当夸张。随着项目的发展,最好保持这种模块化。