JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】

简介: JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】

@[toc]

JXcore 打包

在这里插入图片描述

node.Js是面向服务器端和网络应用程序的开源跨平台运行环境。
JXcore是一个支持多线程的节点。对于js发行版,您可以在多个线程中安全运行,而无需对现有代码进行任何更改。
安装命令如下:


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

包含以下文件:

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

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

$ node index.js command_line_arguments

模块系统

node.js文件相互调用,Node.js提供了一个简单的模块系统。
模块是一个节点。js应用程序的基本组件、文件和模块是一对一的。换句话说,节点js文件是一个模块,可以是JavaScript代码、JSON或编译的C/C++扩展。

exports.world = function() {
  console.log('Hello World');
}

helloJs通过exports对象将世界作为模块的访问接口Js通过require('./hello')加载模块,然后可以直接访问Js中exports对象的成员函数hello。
有时我们只想将一个对象封装成以下格式的模块:

//hello.js 
function Hello() { 
    var name; 
    this.setName = function(thyName) { 
        name = thyName; 
    }; 
    this.sayHello = function() { 
        console.log('Hello ' + name); 
    }; 
}; 
module.exports = Hello;

这样就可以直接获得这个对象了:

//main.js 
var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

模块接口中唯一的变化是使用模块Exports=Hello替换exportsworld=function(){}当外部引用此模块时,其接口对象是要输出的Hello对象本身,而不是原始导出。

var http = require("http");

...

http.createServer(...);

node.Js附带一个名为http的模块。我们在代码中请求它,并将返回值分配给一个局部变量。
这将我们的局部变量转换为一个对象,该对象包含http模块提供的所有公共方法。
node.Js的require方法中的文件搜索策略如下:
因为节点js中有四种类型的模块(原生模块和三个文件模块)。尽管require方法非常简单,但内部加载非常复杂,并且它们的加载优先级不同。

LOAD_AS_DIRECTORY(X)
1. 如果 X/package.json 是一个文件,
   a. 解析 X/package.json, 并查找 "main" 字段。
   b. let M = X + (json main 字段)
   c. LOAD_AS_FILE(M)
   d. LOAD_INDEX(M)
2. LOAD_INDEX(X)

LOAD_NODE_MODULES(X, START)
1. let DIRS=NODE_MODULES_PATHS(START)
2. for each DIR in DIRS:
   a. LOAD_AS_FILE(DIR/X)
   b. LOAD_AS_DIRECTORY(DIR/X)

NODE_MODULES_PATHS(START)
1. let PARTS = path split(START)
2. let I = count of PARTS - 1
3. let DIRS = []
4. while I >= 0,
   a. if PARTS[I] = "node_modules" CONTINUE
   b. DIR = path join(PARTS[0 .. I] + "node_modules")
   c. DIRS = DIRS + DIR
   d. let I = I - 1
5. return DIRS

net

在UNIX上,本地域也称为UNIX域。参数路径是文件系统路径名。它从sizeof(sockaddr_un.sun_path)-1被截断,其长度从91到107字节不等,具体取决于操作系统。Linux上的典型值为107,macOS上为103。路径受与创建的文件相同的命名约定和权限检查的约束。它将在文件系统中可见,并将持续到取消链接时。
在Windows上,本地域通过命名管道实现。路径必须是?\Pipe或\Pipe是入口。路径允许任何字符,但以下字符可能会对管道名称进行某些处理,例如解析..Sequence。但是,管道空间是平坦的。管道不会持续,并且在关闭最后一个参照时将被删除。不要忘记在转义JavaScript字符串时使用双反斜杠来指定路径,

net.createServer().listen(
  path.join('\\\\?\\pipe', process.cwd(), 'myctl'));

server.address()
如果在IP套接字上侦听,将返回操作系统报告的绑定IP地址、地址系列和服务端口。在查找操作系统分配的地址时,查找指定的端口非常有用。返回具有端口、系列和地址属性的对象:{port:12346,系列:“IPv4”,地址:“127.0.0.1”}
对于侦听管道或UNIX域套接字的服务器,名称将作为字符串返回

const server = net.createServer((socket) => {
  socket.end('goodbye\n');
}).on('error', (err) => {
  // handle errors here
  throw err;
});

// grab an arbitrary unused port.
server.listen(() => {
  console.log('opened server on', server.address());
});

停止服务器以接受和创建新连接并保留现有连接此功能是异步的。当所有连接都关闭并且服务器响应['close'][]事件时,服务器将最终关闭。一旦发生'close',将调用可选的回调函数。与此事件不同,如果服务器在关闭时未打开,则将使用错误作为唯一参数。

server.on('error', (e) => {
  if (e.code === 'EADDRINUSE') {
    console.log('Address in use, retrying...');
    setTimeout(() => {
      server.close();
      server.listen(PORT, HOST);
    }, 1000);
  }
});

所有listen()方法都可以传入backlog参数,以指定要连接的队列的最大长度。

相关文章
|
11天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
35 2
|
24天前
|
监控 安全 测试技术
网络信息系统的整个生命周期
网络信息系统规划、设计、集成与实现、运行维护及废弃各阶段介绍。从企业需求出发,经过可行性研究和技术评估,详细设计系统架构,完成设备安装调试和系统集成测试,确保稳定运行,最终安全退役。
33 1
网络信息系统的整个生命周期
|
11天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
45 3
|
11天前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
53 1
|
11天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
43 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
25天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
242 4
|
25天前
|
机器学习/深度学习 存储 运维
图神经网络在复杂系统中的应用
图神经网络(Graph Neural Networks, GNNs)是一类专门处理图结构数据的深度学习模型,近年来在复杂系统的研究和应用中展现了强大的潜力。复杂系统通常涉及多个相互关联的组件,其行为和特性难以通过传统方法进行建模和分析。
46 3
|
24天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
3天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
3天前
|
安全 算法 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在当今数字化时代,网络安全和信息安全已经成为了全球关注的焦点。随着技术的发展,网络攻击手段日益狡猾,而防范措施也必须不断更新以应对新的挑战。本文将深入探讨网络安全的常见漏洞,介绍加密技术的基本概念和应用,并强调培养良好安全意识的重要性。通过这些知识的分享,旨在提升公众对网络安全的认识,共同构建更加安全的网络环境。
下一篇
无影云桌面