Node.js规范化应用
Node.js运行在一个单线程模式,但它使用一个事件驱动范例来处理并发。它还有助于创建子进程,以充分利用并行处理的多核CPU系统。
子进程总是有三个流child.stdin,child.stdout和child.stderr这可能与父进程stdio流共享。
Node提供child_process模块,该模块具有以下三个主要的方法来创建子进程。
exec - child_process.exec方法在shell/控制台运行一个命令并缓冲输出。
spawn - child_process.spawn启动一个新的过程,一个给定的指令
fork - child_process.fork方法是指定spawn()来创建子进程的一个特例。
exec() 方法
child_process.exec方法在shell运行一个命令并缓冲输出。它具有以下特征:
child_process.exec(command[, options], callback)
参数
下面是使用的参数的说明:
command 字符串是要运行的命令,用空格分隔的参数
options 对象可包括以下一个或多个选项:
cwd 子进程的字符串当前工作目录
env 对象环境的键值对
encoding 字符串(缺省:“UTF8”)
shell 字符串执行(默认命令:在UNIX上为 '/bin/sh',在Windows为cmd.exe“, 在shell应该明白/s /c 在Windows或 -c 在UNIX/;在Windows中,命令行解析应与cmd.exe兼容)
timeout 数字(默认: 0)
maxBuffer 数字(默认: 200*1024)
killSignal 字符串 (默认: 'SIGTERM')
uid 数字用于设置过程的用户的身份
gid 数字设置进程的组标识
callback 函数获取三个参数错误,输出和错误被称为与下面的输出,当进程终止。
在exec()方法返回一个缓冲带最大尺寸,等待结束该进程,并尝试一次返回所有缓存数据。
例子
让我们创建两个JS文件名分别为:support.js和master.js:
File: support.js
console.log("Child Process " + process.argv[2] + " executed." );
File: master.js
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var workerProcess = child_process.exec('node support.js '+i,
function (error, stdout, stderr) {
if (error) {
console.log(error.stack);
console.log('Error code: '+error.code);
console.log('Signal received: '+error.signal);
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
});
workerProcess.on('exit', function (code) {
console.log('Child process exited with exit code '+code);
});
}
现在运行master.js看到结果:
$ node master.js
验证输出。服务器已经启动
Child process exited with exit code 0 stdout: Child Process 1 executed. stderr: Child process exited with exit code 0 stdout: Child Process 0 executed. stderr: Child process exited with exit code 0 stdout: Child Process 2 executed.
spawn() 方法
child_process.spawn 方法启动使用给定命令一个新的进程。它具有以下特征:
child_process.spawn(command[, args][, options])
参数
下面是使用的参数的说明:
command 字符串运行的命令
args 字符串参数数组列表
options 对象可包括以下一个或多个选项:
cwd 子进程的字符串为当前工作目录
env 对象环境的键值对
stdio 数组|子串的标准输入输出配置
customFds 数组,不推荐使用文件描述符的子数组,使用作为标准输入输出
detached 布尔将是一个子进程组
uid 数目设置进程的用户的身份。
gid 数目设置进程的组标识。
spawn()方法返回流(标准输出与标准错误),它当处理返回大量的数据被使用。spawn()开始接收到响应的进程开始执行。
例子
创建两个JS文件名分别为support.js和master.js:
File: support.js
console.log("Child Process " + process.argv[2] + " executed." );
File: master.js
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var workerProcess = child_process.spawn('node', ['support.js', i]);
workerProcess.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
workerProcess.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
workerProcess.on('close', function (code) {
console.log('child process exited with code ' + code);
});
}
现在运行master.js看到的结果:
$ node master.js
验证输出。服务器已经启动
stdout: Child Process 0 executed. child process exited with code 0 stdout: Child Process 1 executed. stdout: Child Process 2 executed. child process exited with code 0 child process exited with code 0
fork方法
child_process.fork方法是spawn()来创建节点的过程的一个特例。它具有以下签名
child_process.fork(modulePath[, args][, options])
参数
下面是使用的参数的说明:
modulePath 字符串 - 该模块在运行子进程
args 字符串 - 参数数组列表
options 对象可包括以下一个或多个选项:
cwd 字符串 - 子进程的当前工作目录
env 对象环境的键值对
execPath 字符串 - 可执行用于创建子进程
execArgv 传递给可执行字符串参数数组列表(默认值:process.execArgv)
silent Boolean - 如果为true,标准输入,stdout和子标准错误将通过管道输送到父进程,否则会从父继承,看到“pipe”和“inherit”选项spawn()更多细节标准输入输出(默认为false)
uid 数字 - 设置进程的用户的身份。
gid 数字 - 设置进程的组标识。
fork 方法返回与对象内置除了具有在正常ChildProcess实例的所有方法的通信信道。
例子
创建两个JS文件名为support.js和master.js:
File: support.js
console.log("Child Process " + process.argv[2] + " executed." );
File: master.js
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var worker_process = child_process.fork("support.js", [i]);
worker_process.on('close', function (code) {
console.log('child process exited with code ' + code);
});
}
现在运行master.js看到的结果:
$ node master.js
验证输出。服务器已经启动
Child Process 0 executed. Child Process 1 executed. Child Process 2 executed. child process exited with code 0 child process exited with code 0 child process exited with code 0
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:易百教程 [http:/www.yiibai.com]
本文标题:Node.js规范化应用
本文地址:http://www.yiibai.com/nodejs/nodejs_scaling_application.html
Node.js规范化应用的更多相关文章
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Node.js文件系统、路径的操作详解
17173 17173 2 75 2014-12-12T05:06:00Z 2014-12-12T05:06:00Z 21 2735 15595 www.17173.com 129 36 18294 ...
- Node.js文件系统、路径的操作函数
Node.js文件系统.路径的操作函数 目录 Node.js文件系统.路径的操作函数 1.读取文件readFile函数 2.写文件 3.以追加方式写文件 4.打开文件 5.读文件,读取打开的文件内容到 ...
- Node.js快速入门
Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...
- 转:Node.js邮件发送组件- Nodemailer 1.0发布
原文来自于http://www.infoq.com/cn/news/2014/07/node.js-nodemailer1.0-publish Nodemailer是一个简单易用的Node.js邮件发 ...
- 使用Node.js搭建静态资源服务器
对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...
- 使用 Node.js 搭建一个 API 网关
原文地址:Building an API Gateway using Node.js 外部客户端访问微服务架构中的服务时,服务端会对认证和传输有一些常见的要求.API 网关提供共享层来处理服务协议之间 ...
- Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Node.js Path 模块
Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块: var path = require("path") 方法 序号 方法 & ...
随机推荐
- HTML5 canvas标签绘制正三角形 鼠标按下点为中间点,鼠标抬起点为其中一个顶点
用html5的canvas标签绘制圆.矩形比较容易,绘制三角形,坐标确定相当于前面两种难点,这里绘制的是正三角形,比较容易,我们只需要把鼠标刚按下去的点设置为三角形的中心点,鼠标抬起的点设置为三角形右 ...
- 《Java并发编程实战》第六章 任务运行 读书笔记
一. 在线程中运行任务 无限制创建线程的不足 .线程生命周期的开销很高 .资源消耗 .稳定性 二.Executor框架 Executor基于生产者-消费者模式.提交任务的操作相当于生产者.运行任务的线 ...
- C 语言中 typeof keyword简单介绍
原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html typeofkeyword是C语言中的一个新扩展.仅 ...
- android 57 QQ登录
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- iOS-UIScrollView的delaysContentTouches与canCencelContentTouches属性
UIScrollView工作原理 在滚动过程当中,其实是在修改原点坐标 UIScrollView有一个BOOL类型的tracking属性,用来返回用户是否已经触及内容并打算开始滚动,我们从这个属性开始 ...
- Struts2和Struts1的不同
转载(没看懂) Action 类 ◆Struts1要求Action类继承一个抽象基类org.apache.struts.action.Action.Struts1的一个普遍问题是使用抽象类编程而不是接 ...
- 【网络通信】服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么?
1. 服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么? 答:对.建立连接时服务器会分配一个新的Socket,但是用的源端口号还是80端口.套接字是由协议类型.源IP.目的IP ...
- [转] Webpack 入门指迷
大概算是一份教程吧, 只不过效果肯定不如视频演示之类的好.. Webpack 最近在英文社区上经常看到, 留了心, 但进一步了解是通过下边的视频:视频: How Instagram.com Works ...
- c#中jeson字符串和OBJECT对象的相互转换
对于本问题 我用三步来分别说明实现过程 1.定义一个类---- 实现转换的具体方法 using System; using System.Collections.Generic; using Sy ...
- android开发之调试技巧 分类: android 学习笔记 2015-07-18 21:30 140人阅读 评论(0) 收藏
我们都知道,android的调试打了断点之后运行时要使用debug as->android application 但是这样的运行效率非常低,那么我们有没有快速的方法呢? 当然有. 我们打完断点 ...