我即将开始编写一个聊天机器人。然而,我计划运行多个聊天机器人,使用包装器进行通信并重新启动它们。我过去用child_process.fork()
做过这件事,但效率非常低。我也研究过spawn
和cluster
,但它们似乎都专注于运行相同的东西,而不是唯一的机器人。至于插件,我已经研究了fleet
、forkfriend
和workerfarm
,但似乎没有一个符合我的需求。
有没有什么插件或我看不到的方法可以帮助我做到这一点?还是我只想再赢一次?
您可以在一个进程中拥有任意数量的聊天机器人。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');
}
});
我相信这正是你所需要的。启动具有不同配置的几个进程(如果配置的数量相对较低),并将套接字从主进程传递到特定的进程。