在node.js中pipe理独特subprocess的最佳方法
我即将开始编码聊天机器人。 但是,我计划运行多个,使用包装来沟通和重新启动它们。 我过去用child_process.fork()
完成了这个工作,但是效率非常低。 我也研究过spawn
和cluster
,但是他们似乎都专注于运行同样的事情,而不是独特的机器人。 至于插件,我已经看过fleet
, forkfriend
和workerfarm
,但是没有一个能够满足我的需求。
有什么插件或方法我没有看到帮助我做到这一点? 或者我只是想再次拥有它?
您可以在一个进程中随心所欲地使用多个聊天机器人。 Node.js中的经验法则是每个处理器核心使用一个进程,因为Node可能会有一些稍微不同的multithreading模型。
假设你还需要一些multithreading,这里有几个节点模块可以满足你的需求: node-webworker-threads , 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'); } });
我相信这几乎是你所需要的。 使用不同configuration启动多个进程(如果configuration数量较less),并将套接字传递给主进程中的特定进程。