在node.js中管理唯一子进程的最佳方式



我即将开始编写一个聊天机器人。然而,我计划运行多个聊天机器人,使用包装器进行通信并重新启动它们。我过去用child_process.fork()做过这件事,但效率非常低。我也研究过spawncluster,但它们似乎都专注于运行相同的东西,而不是唯一的机器人。至于插件,我已经研究了fleetforkfriendworkerfarm,但似乎没有一个符合我的需求。

有没有什么插件或我看不到的方法可以帮助我做到这一点?还是我只想再赢一次?

您可以在一个进程中拥有任意数量的聊天机器人。Node.js中的经验法则是每个处理器核心使用一个进程,因为Node的多线程模型与您可能习惯的略有不同

假设您还需要一些多线程,以下是一些您可能会发现适合您需求的节点模块:节点webworker线程,dnode。

更新:

现在我明白你需要什么了。Node.js文档中有一个很好的例子,我最近看到了。我只是复制&粘贴到这里:

var normal = require('child_process').fork('child.js', ['normal']);
var special = require('child_process').fork('child.js', ['special']);
// Open up the server and send sockets to child
var server = require('net').createServer();
server.on('connection', function (socket) {
  // if this is a VIP
  if (socket.remoteAddress === '74.125.127.100') {
    special.send('socket', socket);
    return;
  }
  // just the usual dudes
  normal.send('socket', socket);
});
server.listen(1337);

child.js看起来是这样的:

process.on('message', function(m, socket) {
  if (m === 'socket') {
    socket.end('You were handled as a ' + process.argv[2] + ' person');
  }
});

我相信这正是你所需要的。启动具有不同配置的几个进程(如果配置的数量相对较低),并将套接字从主进程传递到特定的进程。

最新更新