Timers和进程在Client里的性能表现实战心得【Node.js】

时间:2022-10-31 07:21:07

Timers 计时器

Node通过ChildProcess类提供了全面的popen(3)函数。程序可以通过子流程的标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)以完全无阻塞的形式传输数据。 您可以使用require('child_process')spawn()创建子进程。每个子流程总是有三个流对象:child-stdin、child。标准和子标准错误每个ChildProcess类也是一个事件触发器。

var spawn = require('child_process').spawn,
grep = spawn('grep', ['ssh']);
console.log('Spawned child pid: ' + grep.pid);
grep.stdin.end();

Cwd可以用于指定新进程的工作目录,env可以指定新进程可见的环境变量,customFds可以将新进程的[stdin,stdout,stderr]绑定到指定的流,-1表示创建新的流。 示例:执行命令'ls-lh/usr'并捕获标准输出、标准错误输出和退出代码(程序退出时主函数返回的代码)。

var sys = require('sys'),
spawn = require('child_process').spawn,
ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', function (data) {
sys.print('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
sys.print('stderr: ' + data);
});
ls.on('exit', function (code) {
console.log('child process exited with code ' + code);
});

如果超时大于0,节点将终止运行时间超过超时(毫秒)的子进程。子进程将被终止信号终止(默认值为“SIGKILL”)。MaxBuffer指定stdout和stderr的最大可缓存数据大小。如果超过此值,子流程将终止。

var spawn = require('child_process').spawn,
grep = spawn('grep', ['ssh']);
grep.on('exit', function (code, signal) {
console.log('child process terminated due to receipt of signal '+signal);
});
// send SIGHUP to process
grep.kill('SIGHUP');

process 进程

此事件在进程退出时触发。这是检查模块状态的好地方(例如,单元测试)。由于在“exit”返回方法后主事件循环将不会继续执行,计时器可能不会生效。

process.on('exit', function () {
process.nextTick(function () {
console.log('This will not run');
});
console.log('About to exit.');
});

发生未处理的异常时触发此事件。如果事件具有侦听器函数,则不会执行默认行为(默认行为将打印错误堆栈并结束应用程序的执行)。例如,侦听“uncaughtException”事件:

process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
setTimeout(function () {
console.log('This will still run.');
}, 500);
// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');

保存命令行参数的数组。第一个参数是“node”,第二个参数是Javascript文件的文件名,然后是其他命令行参数。

process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
});

Client

使用服务器地址作为参数来构造HTTP客户端。返回的句柄可用于发送一个或多个请求。根据连接的服务器,客户端可以使用管道处理机制来处理请求或为每个请求重建流。当前实现不使用管道处理机制来处理请求。

Example of connecting to google.com:
var http = require('http');
var google = http.createClient(80, 'www.google.com');
var request = google.request('GET', '/',
{'host': 'www.google.com'});
request.end();
request.on('response', function (response) {
console.log('STATUS: ' + response.statusCode);
console.log('HEADERS: ' + JSON.stringify(response.headers));
response.setEncoding('utf8');
response.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});

节点不添加“主机”,但网站通常需要此属性。 发送“Connection:keep-alive”将告诉节点和服务器,该连接应该持续到下一个请求。发送“内容长度”标志将禁用默认邮件正文编码。 事件:“升级”

function (request, socket, head)