javascript - 在 Node 中控制多个进程

标签 javascript node.js

好的,所以我有一个机器人托管的事情。这几乎是我现在唯一能让我保持理智的东西。它是一个用于音乐/聊天网站的 IRC 类型的机器人,它可以做很多事情。但问题是让他们保持在线。我曾经使用一个 sh 文件来单独启动所有机器人 forever .

cd dir/bots
forever start bot1.js
forever start bot2.js
...

等等,等等。这奏效了。但是机器人本身占用大约 30mb 的 RAM,而永久进程也占用大约 30mb 的 RAM。因此,随着我运行的机器人数量的增加,我的 RAM 几乎用完了,这并不好,因为如果我必须获得另一台服务器,事情对我来说会变得无限复杂,如果我说实话,我不太擅长这个。

所以我做了一些研究,并认为我只需要使用 child.fork() 并使用一个 bot.js 来生成其余的机器人。它工作得很好,将我的 ram 使用量减少到不到原来的一半。但现在让机器人保持在线很痛苦。

var child = require("child_process");
var running = {};
var bots = ["bot1","bot2","bot3"];
for (var i=0;i<bots.length;i++) { 
    running[bots[i]] = child.fork("bots/"+bots[i]+".js");
};

我的问题是 - 这是运行此设置的最有效方式吗?因为它们经常崩溃,如果我想以任何方式被认为是可靠的,它们就需要非常自给自足,并且在我 sleep 的深夜关闭。

现在我正在使用 node-scheduler创建一个假的 cron 作业,从服务向机器人发送消息(不是 Node 消息,因为只要 js 文件正在运行,它就会返回,如果机器人连接到服务,则不会返回),并让机器人返回命令。它设置了一个命令,这样如果它在 15 秒内没有收到机器人的响应,它就会重新启动它。但它似乎并不总是有效。我不知所措。

如有任何帮助,我们将不胜感激,如果可以,我会提供更多详细信息。

最佳答案

看看fleet通过子堆栈。一架无人机可以管理任意数量的进程,并自动重启任何崩溃的进程。

Fleet 的工作原理是设置一个集线器和连接到该集线器的 1 台或多台无人机。您使用 git 将您的代码推送到中心。集线器会自动将新版本的代码部署到所有连接的无人机。然后你可以调用fleet spawn -- node foo.js。 Fleet 将开始运行 node foo.js 并在崩溃时自动重启 foo.js

关于javascript - 在 Node 中控制多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867324/

相关文章:

javascript - 如何调整 slick.js 的点行为?

javascript - 检查一个数组是否包含 JavaScript 中另一个数组的任何元素

node.js - Azure 应用服务 (Windows) - SvelteKit 应用程序的 Nodejs ES 模块问题

javascript - 将函数列表应用于 Javascript 中的可能值

javascript - 如何通过单击按钮来更新 Flask 应用程序中的一个元素?

javascript - 数据表 - 响应不起作用?

node.js - Node 邮件调度程序在云上托管的多个服务器实例后面发送多封邮件

node.js - 如何仅使用 npm 获取当前包的版本

javascript - Node.js - 模块导出静态变量

node.js - Turf.js圆多边形坐标问题