写点什么

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

作者:黎燃
  • 2022-11-24
    内蒙古
  • 本文字数:1628 字

    阅读完需:约 5 分钟

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 processgrep.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)
复制代码


发布于: 刚刚阅读数: 5
用户头像

黎燃

关注

前端工程师 2022-05-06 加入

专注学习分享前端知识。

评论

发布
暂无评论
Timers和进程在Client里的性能表现实战心得【Node.js】_前端_黎燃_InfoQ写作社区