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:对象

相关文章
|
2月前
|
JSON JavaScript 前端开发
JS服务端技术—Node.js知识点
本篇文章是我开始系统学习Node.js的一些笔记。如果文中阐述不全或不对的,多多交流。
62 0
JS服务端技术—Node.js知识点
|
11天前
报错/ ./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)怎么解决?
|
5天前
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第二章(Node连接本地数据库)
【4月更文挑战第2天】本文介绍了如何使用Node.js连接本地MySQL数据库。首先,提到了在MySQL官网下载安装数据库和使用Navicat for MySQL进行数据库管理。接着,通过`yarn add mysql`在项目中安装数据库依赖。然后,创建`app.js`文件,设置数据库连接参数,并建立连接进行查询操作。遇到导入模块的错误后,修改导入方式为CommonJS语法。
19 1
|
26天前
|
Web App开发 JavaScript 前端开发
js开发:请解释什么是Node.js,以及它的应用场景。
Node.js是基于V8的JavaScript运行时,用于服务器端编程。它的事件驱动、非阻塞I/O模型使其在高并发实时应用中表现出色,如Web服务器、实时聊天、API服务、微服务、工具和跨平台桌面应用(使用Electron)。适用于高性能和实时需求场景。
18 4
|
1月前
|
JavaScript 前端开发 Serverless
函数计算新功能— 支持 Node.js 18 、Node.js 20 运行时
从2024年2月起,函数计算正式发布 Node.js 18 运行时和 Nodejs.20 运行时,函数计算2.0和函数计算3.0都支持新的运行时,目前新运行时处在公测状态,欢迎大家来体验。
455 0
|
2月前
|
Web App开发 JavaScript 前端开发
构建现代Web应用:Vue.js与Node.js的完美结合
在当今快速发展的Web技术领域,选择合适的技术栈对于开发高效、响应迅速的现代Web应用至关重要。本文深入探讨了Vue.js和Node.js结合使用的优势,以及如何利用这两种技术构建一个完整的前后端分离的Web应用。不同于传统的摘要,我们将通过一个实际的项目示例,展示从搭建项目架构到实现具体功能的整个过程,着重介绍了Vue.js在构建用户友好的界面方面的能力,以及Node.js在处理服务器端逻辑和数据库交互中的高效性。通过本文,读者不仅能够理解Vue.js与Node.js各自的特点,还能学习到如何将这两种技术融合应用,以提升Web应用的开发效率和用户体验。
|
2月前
|
监控 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
78 0
|
2月前
|
Web App开发 缓存 JavaScript
【安装指南】nodejs下载、安装与配置详细教程
这篇博文详细介绍了 Node.js 的下载、安装与配置过程,为初学者提供了清晰的指南。读者通过该教程可以轻松完成 Node.js 的安装,了解相关配置和基本操作。文章首先介绍了 Node.js 的背景和应用场景,随后详细说明了下载安装包、安装步骤以及配置环境变量的方法。作者用简洁明了的语言,配以步骤图示,使得读者能够轻松跟随教程完成操作。总的来说,这篇文章为初学者提供了一个友好的入门指南,使他们能够顺利开始使用 Node.js 进行开发。
149 1
【安装指南】nodejs下载、安装与配置详细教程
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
70 0
|
3月前
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
34 0