Note.js框架中的cluster集群和断言测试的实战剖析

简介: Note.js框架中的cluster集群和断言测试的实战剖析

@[toc]

Cluster

节点。Js在单个线程中运行单个实例。为了使用当前的多核系统,用户(开发人员)有时会使用一个Node字符串。js进程来处理加载任务。
集群模块允许轻松创建共享服务器端口的子进程。

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`主进程 ${process.pid} 正在运行`);

  // 衍生工作进程。
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`工作进程 ${worker.process.pid} 已退出`);
  });
} else {
  // 工作进程可以共享任何 TCP 连接。
  // 在本例子中,共享的是一个 HTTP 服务器。
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('你好世界\n');
  }).listen(8000);

  console.log(`工作进程 ${process.pid} 已启动`);
}
AI 代码解读

第一种方法(也是除Windows以外的所有平台的默认方法)是循环方法。主进程负责侦听端口,并在接收到新连接后将连接循环分发给工作进程。发行版中使用了一些内置技术,以防止工作进程过载。
第二种方法是主进程创建侦听套接字并将其发送给感兴趣的工作进程。工作进程负责直接接收连接。
理论上,第二种方法应该是最有效的,但在实践中,由于操作系统的不可预测的调度机制,分配将变得不稳定。我们遇到过这种情况:8个进程中有2个共享70%的负载。

worker.send

向工作进程或主进程发送消息,或发送句柄。
当主进程调用此方法时,它将向特定的工作进程发送消息。另一种等效方法是ChildProcess。
当工作进程调用此方法时,它将向主进程发送消息。另一种等效方法是过程。
工作进程将回显主进程发送的消息。

if (cluster.isMaster) {
  const worker = cluster.fork();
  worker.send('hi there');

} else if (cluster.isWorker) {
  process.on('message', (msg) => {
    process.send(msg);
  });
}
AI 代码解读

assert 断言测试

测试实际参数是否等于预期深度参数。使用相等运算符(==)比较原始值。
只测试可枚举自身属性,而不测试对象的原型、连接器或不可枚举属性(在这些情况下使用assert.deepStrictEqual())。例如,以下示例不会引发AssertionError,因为RegExp对象的属性不可枚举:

assert.deepEqual(/a/gi, new Date());
AI 代码解读

映射和集合中包含的子项也将进行测试。
还将测试子对象的可枚举属性:

const assert = require('assert');

const obj1 = {
  a: {
    b: 1
  }
};
const obj2 = {
  a: {
    b: 2
  }
};
const obj3 = {
  a: {
    b: 1
  }
};
const obj4 = Object.create(obj1);

assert.deepEqual(obj1, obj1);

assert.deepEqual(obj1, obj2);

assert.deepEqual(obj1, obj3);
assert.deepEqual(obj1, obj4);
AI 代码解读

测试通过,两个对象相等。

Buffer (缓冲)

在ECMAScript 2015(ES6)引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制。Buffer类作为Node Js API引入,使其能够在TCP流或文件系统操作等场景中处理二进制数据流。
TypedArray已添加到ES6中。Buffer类更优化,更适合Node。js用例的方法实现了Uint8Array API。
Buffer类的实例类似于整数数组,但Buffer的大小是固定的,物理内存分配在V8堆之外。缓冲区的大小在创建时确定,无法调整。
Buffer类位于节点J中。它是一个全局变量,因此不需要使用require('Buffer')。缓冲器
创建一个长度为 10、且用 0x1 填充的 Buffer。

const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(10, 1);
const buf3 = Buffer.allocUnsafe(10);

const buf4 = Buffer.from([1, 2, 3]);

const buf5 = Buffer.from('tést');
const buf6 = Buffer.from('tést', 'latin1');
AI 代码解读

创建一个长度为 10、且未初始化的 Buffer。
这个方法比调用 Buffer.alloc() 更快,
但返回的 Buffer 实例可能包含旧数据,
因此需要使用 fill() 或 write() 重写。

命令行选项

节点。Js您可以在开始时使用--zero-fill-buffers命令行选项,强制所有用户使用新的Buffer(size)和BufferallocUnsafe()、Buffer。AllocUnsafeSlow()或newSlowBuffer(大小)新分配的缓冲区实例在创建时自动填充0。使用此选项将更改这些方法的默认行为,并对性能产生重大影响。建议仅在需要强制新分配的Buffer实例不包含潜在敏感数据时使用--zero-fill-buffers选项。

$ node --zero-fill-buffers
> Buffer.allocUnsafe(5);
<Buffer 00 00 00 00 00>
AI 代码解读

输出: auffer

const buf1 = new Buffer('buffer');
const buf2 = new Buffer(buf1);

buf1[0] = 0x61;
console.log(buf1.toString());

console.log(buf2.toString());
AI 代码解读

new Buffer

分配大小为字节的新缓冲区。如果大小大于buffer.constants.MAX_LENGTH或小于0,则抛出RangeError错误。如果大小为0,将创建长度为0的缓冲区。
在Node.js 8.0.0之前,以这种方式创建的Buffer实例的底层内存未初始化。新缓冲区的内容未知,可能包含敏感数据。使用缓冲区。alloc(size)将缓冲区初始化为0。

const buf = new Buffer(10);
AI 代码解读
const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
AI 代码解读
目录
打赏
0
0
0
0
154
分享
相关文章
Next.js 实战 (九):使用 next-auth 完成第三方身份登录验证
这篇文章介绍了next-auth,一个为Next.js设计的身份验证库,支持多种认证方式,如电子邮件和密码、OAuth2.0提供商(如Google、GitHub、Facebook等)以及自定义提供商。文章包含了如何配置Github Provider以及会话管理,并提到了适配器Adapters在next-auth中的作用。最后,文章强调了next-auth的强大功能值得进一步探索。
74 10
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
31 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
90 33
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
这篇文章介绍了作者在使用Nextjs15进行项目开发时遇到的部署问题。在部署过程中,作者遇到了打包构建时的一系列报错,报错内容涉及动态代码评估在Edge运行时不被允许等问题。经过一天的尝试和调整,作者最终删除了lodash-es库,并将radash的部分源码复制到本地,解决了打包报错的问题。文章最后提供了项目的线上预览地址,并欢迎读者留言讨论更好的解决方案。
41 10
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
114 15
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
546 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
91 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    45
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    28
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等