Node.js实战之Node多进程与JXcore 打包深入运用

简介: Node.js实战之Node多进程与JXcore 打包深入运用

JXcore 打包

在这里插入图片描述

Jxcore是一个支持多线程JS发布版本的节点,基本上不需要对现有代码进行任何更改,可以直接在多线程中运行,具有线程安全性。
本文主要介绍jxcore的封装功能。
下载jxcore安装包并解压缩。解压目录中提供了JX二进制文件命令。接下来,我们主要使用这个命令。
Linux/OSX 安装命令:

$ curl https://raw.githubusercontent.com/jxcore/jxcore/master/tools/jx_install.sh | bash

如果权限不足,可以使用以下命令:

$ curl https://raw.githubusercontent.com/jxcore/jxcore/master/tools/jx_install.sh | sudo bash

如果上述步骤正确,将使用以下命令输出版本号信息:

$ jx --version
v0.10.32

如果成功执行上述命令,将生成以下两个文件:
指数这是一个中间件文件,包含需要编译的完整项目信息。
指数这是一个完整包信息的二进制文件,可以在客户端上运行。

drwxr-xr-x  2 root root  4096 Nov 13 12:42 images
-rwxr-xr-x  1 root root 30457 Mar  6 12:19 index.htm
-rwxr-xr-x  1 root root 30452 Mar  1 12:54 index.js
drwxr-xr-x 23 root root  4096 Jan 15 03:48 node_modules
drwxr-xr-x  2 root root  4096 Mar 21 06:10 scripts
drwxr-xr-x  2 root root  4096 Feb 15 11:56 style

Node.js 的项目运行:

$ node index.js command_line_arguments

使用 JXcore 编译后,我们可以使用以下命令来执行生成的 jx 二进制文件:

$ jx index.jx command_line_arguments

Node.js 多进程

我们都知道node JS以单线程模式运行,但它使用事件驱动来处理并发。
这有助于我们在多核CPU系统上创建多个子进程,从而提高性能。
每个子进程总是有三个流对象:child和stdin,以及child。
标准输出和子标准输出它们可以共享父进程的stdio流,也可以是独立的重定向流对象。
节点提供child_流程模块用于通过以下方式创建子流程:
exec-child_进程。
Exec使用子进程执行命令,缓存子进程的输出,并以回调函数参数的形式返回子进程的结果。
spawn-child_进程。
Spawn使用指定的命令行参数创建新进程。
fork-child_进程。
Fork是spawn()的一种特殊形式,用于在子进程中运行的模块。例如,fork('./son.JS')等同于spawn('node'['./son.JS')。与spawn方法不同,fork将在父进程和子进程之间建立通信管道,用于进程之间的通信。

exec() 方法

child_进程。Exec使用子进程执行命令,缓存子进程的输出,并以回调函数参数的形式返回子进程的结果。

child_process.exec(command[, options], callback)

callback:回调函数,包括三个参数:error、stdout和stderr。
exec()方法返回最大缓冲区,等待进程结束,并一次返回缓冲区的内容。

onsole.log("进程 " + process.argv[2] + " 执行。" );
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('子进程已退出,退出码 '+code);
    });
}

执行上述代码,输出结果为:

$ node master.js
子进程已退出,退出码 0
stdout: 进程 1 执行。

stderr: 子进程已退出,退出码 0 stdout: 进程 0 执行。

stderr: 子进程已退出,退出码 0 stdout: 进程 2 执行。

spawn() 方法

child_process.spawn(command[, args][, options])

spawn()方法返回一个流(stdout&stderr),当进程返回大量数据时使用该流。一旦进程开始执行,spawn()就开始接收响应。

console.log("进程 " + process.argv[2] + " 执行。" );
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('子进程已退出,退出码 '+code);
   });
}

执行以上代码,输出结果为:
子进程已退出

子进程已退出,退出码 0
stdout: 进程 1 执行。

子进程已退出,退出码 0
stdout: 进程 2 执行。

fork 方法

child_进程。Fork是spawn()方法的一种特殊形式,用于创建进程。语法格式如下:

child_process.fork(modulePath[, args][, options])

除了childprocess实例的所有方法之外,返回的对象还具有内置的通信通道。
说明如下:

Modulepath:string,要在子进程中运行的模块
Args:数组字符串参数数组
options:对象

相关文章
|
3天前
|
开发框架 JavaScript 中间件
中间件应用Koa.js(Node.js)
我们添加了两个中间件。第一个中间件记录请求的开始时间,并在下一个中间件执行完毕后计算并打印出请求的总时间。第二个中间件与之前的示例相同,它设置响应体为 "Hello World"
19 6
|
14天前
|
JavaScript 前端开发 持续交付
【专栏】Vue.js和Node.js如何结合构建现代Web应用
【4月更文挑战第27天】本文探讨了Vue.js和Node.js如何结合构建现代Web应用。Vue.js作为轻量级前端框架,以其简洁易懂、组件化开发、双向数据绑定和虚拟DOM等特点受到青睐;而Node.js是高性能后端平台,具备事件驱动、非阻塞I/O、丰富生态系统和跨平台优势。两者结合实现前后端分离,高效通信,并支持热更新、持续集成、跨平台和多端适配,为开发高性能、易维护的Web应用提供强有力的支持。
|
14天前
|
存储 JavaScript 前端开发
❤Nodejs 第十四章(node中间件multer的认识安装使用)
【4月更文挑战第14天】Multer是Node.js用于处理multipart/form-data的中间件,专注于文件上传。。基本用法包括设置存储引擎,如磁盘存储(DiskStorage)或内存存储(MemoryStorage),并指定处理单个或多个文件的方法。例如,`multer.single(&#39;file&#39;)`处理单个文件上传。存储引擎DiskStorage适合永久保存,而MemoryStorage适合临时处理。可以通过`limits`选项限制文件大小,实现不同类型的文件有不同的大小限制。
29 0
|
1月前
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
|
3天前
|
JavaScript 中间件 API
中间件应用Express.js(Node.js)
我们定义了一个名为 `logger` 的中间件函数。它接受请求对象、响应对象以及下一个中间件函数作为参数。当接收到请求时,它会打印出请求的 HTTP 方法和 URL,然后调用 `next()` 函数来将控制权传递给下一个中间件或路由处理器。我们使用 `app.use()` 方法将 `logger` 中间件添加到了应用级别的中间件堆栈中,这意味着它将对所有请求生效。
12 3
|
11天前
|
JavaScript 前端开发 开发工具
【JavaScript 技术专栏】Node.js 基础与实战
【4月更文挑战第30天】本文介绍了Node.js的基础及应用,包括事件驱动的非阻塞I/O、单线程模型和模块系统。内容涵盖Node.js的安装配置、核心模块(如http、fs、path)及实战应用,如Web服务器、文件操作和实时通信。文章还讨论了Node.js的优劣势、与其他技术的结合,并通过案例分析展示项目实施流程。总结来说,Node.js是高效后端开发工具,适合构建高并发应用,其广阔的应用前景值得开发者探索。
|
11天前
|
消息中间件 监控 JavaScript
Node.js中的进程管理:child_process模块与进程管理
【4月更文挑战第30天】Node.js的`child_process`模块用于创建子进程,支持执行系统命令、运行脚本和进程间通信。主要方法包括:`exec`(执行命令,适合简单任务)、`execFile`(安全执行文件)、`spawn`(实时通信,处理大量数据)和`fork`(创建Node.js子进程,支持IPC)。有效的进程管理策略涉及限制并发进程、处理错误和退出事件、使用流通信、谨慎使用IPC以及监控和日志记录,以确保应用的稳定性和性能。
|
11天前
|
JavaScript API 开发者
深入了解Node.js的文件系统:Node.js文件系统API的使用与探索
【4月更文挑战第30天】本文深入探讨了Node.js的文件系统API,介绍了如何引入`fs`模块进行文件操作。内容包括异步读取和写入文件、删除文件、创建目录以及使用文件流进行高效操作。此外,还提到了文件系统的监视功能,帮助开发者全面掌握在Node.js中处理文件和目录的方法。
|
15天前
|
编解码 前端开发 JavaScript
node实战——koa实现文件下载和图片/pdf/视频预览(node后端储备知识)
node实战——koa实现文件下载和图片/pdf/视频预览(node后端储备知识)
25 1
|
15天前
|
存储 缓存 NoSQL
node实战——koa给邮件发送验证码并缓存到redis服务(node后端储备知识)
node实战——koa给邮件发送验证码并缓存到redis服务(node后端储备知识)
19 0