Node.js 减少内存使用
在我的NodeJS应用程序中,我面临一些任务的一个主要问题,因为它们需要处理大量数据,这会导致进程有时被操作系统终止,当然我希望避免这种情况。无论如何,我想减少内存消耗,因为终端客户机无论如何都是TCP连接的,将所有内容存储在内存中以批量发送是没有意义的 架构如下所示:Node.js 减少内存使用,node.js,tcp,concurrency,io,buffer,Node.js,Tcp,Concurrency,Io,Buffer,在我的NodeJS应用程序中,我面临一些任务的一个主要问题,因为它们需要处理大量数据,这会导致进程有时被操作系统终止,当然我希望避免这种情况。无论如何,我想减少内存消耗,因为终端客户机无论如何都是TCP连接的,将所有内容存储在内存中以批量发送是没有意义的 架构如下所示: 请求到达主进程 它将其发送到它选择的一个或多个子进程(利用多个内核来满足要求的请求,如下载大量数据) Child处理它的操作并处理这些数据 Child将一些经过处理的数据返回给master 主人对请求作出答复 子对象的数量是预定
p.S.2:如果我使用管道,那么主管道如何能为每个孩子提供单独的管道?您应该直接将到达父管道的插座发送给孩子。一旦孩子有了套接字连接,它就可以接收数据,并且不再使用父母和孩子之间的IPC通信(避免开销)。要实现这一点,您应该使用
worker.process.send([data…],sendHandle)
这非常重要,您可以理解这一点
/!\如果您打算使用sendhold
将服务器实例发送给多个工作进程,请注意,如果您想让直接侦听工作进程(所有工作进程都在同一端口/服务器上),则必须使用集群和。如果不使用集群,就不可能在同一端口上的多个工作进程中侦听
。
我们构建了一个小的NPM包来管理这个()包,它基本上解决了这个问题
// --------------
// parent.js
// --------------
// Load the net module to create a tcp server.
var net = require('net');
var child = require('child_process').fork('child.js');
// Creates a new TCP server. The handler argument is automatically set as a listener for the 'connection' event
var server = net.createServer(function (socket) {
// You should add logic to be sure not sending a socket to a child that isn't alive yet..
child.send({new:'socket connection'}, socket);
});
// --------------
// child.js
// --------------
process.on('message', function (message, socket) {
socket.on('data', function (d) {
// Consume your data here
});
socket.write('write to client if you want...');
});