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参数,以指定要连接的队列的最大长度。

相关文章
|
21天前
|
Ubuntu Windows
【Ubuntu/Arm】Ubuntu 系统如何链接有线网络(非虚拟机)?
【Ubuntu/Arm】Ubuntu 系统如何链接有线网络(非虚拟机)?
|
11天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
32 6
|
1天前
|
运维 前端开发 Devops
云效产品使用报错问题之流水线打包docker镜像时报网络代理有问题如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
11天前
|
域名解析 网络协议 JavaScript
【Node系列】node工具模块
Node.js有多个内置的工具模块,这些模块提供了用于执行各种任务的功能。
21 2
|
13天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
16天前
|
机器学习/深度学习 人工智能 运维
构建未来:AI驱动的自适应网络安全防御系统
【4月更文挑战第7天】 在数字时代的浪潮中,网络安全已成为维系信息完整性、保障用户隐私和确保商业连续性的关键。传统的安全防御策略,受限于其静态性质和对新型威胁的响应迟缓,已难以满足日益增长的安全需求。本文将探讨如何利用人工智能(AI)技术打造一个自适应的网络安全防御系统,该系统能够实时分析网络流量,自动识别并响应未知威胁,从而提供更为强大和灵活的保护机制。通过深入剖析AI算法的核心原理及其在网络安全中的应用,我们将展望一个由AI赋能的、更加智能和安全的网络环境。
28 0
|
26天前
11_nest.js模块
11_nest.js模块
23 0
|
27天前
|
存储 Unix Linux
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
14 0
|
1月前
|
安全 Unix Shell
【Shell 命令集合 网络通讯 】Linux 在不同的系统之间执行远程命令 uux 命令 使用指南
【Shell 命令集合 网络通讯 】Linux 在不同的系统之间执行远程命令 uux 命令 使用指南
28 0
|
前端开发 JavaScript 索引