Node.js 学习笔记二

Node.js 搭建HTTP服务器,建立一个app.js文件,内容为:

var http=require('http');
http.createServer(function(req , res)
{
    res.writeHead(200 , {'Content-Type' : 'text/html'});
    res.write('<h1> Node.js </h1>');
    res.write('<p> Hello World </p>');
}).listen(3000);
console.log('HTTP Server is listening at port 3000');

接下来运行node app.js命令,打开浏览器访问http:127.0.0.1:3000 或者localhost:3000,即可看到如图:

用Node.js实现的最简单的HTTP服务器就这样诞生了。这个程序调用Node.js提供的http模块,对所有HTTP请求答复同样的内容并监听3000端口。

在终端中运行这个脚本时,我们会发现它并不像Hello World 一样结束后立即退出,而是一直等待,直到按下Ctrl +
C 才会结束。这是因为listen 函数中创建了事件监听器,使得Node.js 进程不会退出事件
循环。我们会在后面的章节中详细介绍这其中的奥秘。

小技巧——使用supervisor
如果你有PHP 开发经验,会习惯在修改PHP 脚本后直接刷新浏览器以观察结果,而你在开发Node.js 实现的HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止
Node.js 再重新运行才会奏效。这是因为Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而PHP 则总是重新读取并解析脚本(如果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启 

supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启Node.js。
使用方法很简单,首先使用npm 安装supervisor:
$ npm install -g supervisor

接下来,使用supervisor 命令启动app.js:
$ supervisor app.js
DEBUG: Running node-supervisor with
DEBUG: program 'app.js'
DEBUG: --watch '.'
DEBUG: --extensions 'node|js'
DEBUG: --exec 'node'
DEBUG: Starting child process with 'node app.js'
DEBUG: Watching directory '/home/byvoid/.' forchanges.
HTTP server is listening at port 3000.
当代码被改动时,运行的脚本会被终止,然后重新启动。在终端中显示的结果如下:
DEBUG: crashing child
DEBUG: Starting child process with 'node app.js'
HTTP server is listening at port 3000.
supervisor 这个小工具可以解决开发中的调试问题。

 

3.2 异步式I/O 与事件式编程
Node.js 最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模式。这种模式与传统的同步式I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件
和回调函数来组织,一个逻辑要拆分为若干个单元。3.2.1 阻塞与线程什么是阻塞(block)呢?线程在执行中如果遇到磁盘读写或网络通信(统称为I/O 操作),通常要耗费较长的时间,这时操作系统会剥夺这个线程的CPU 控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为 阻塞。当I/O 操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行。这种I/O 模式就是通常的同步式I/O(Synchronous I/O)或阻塞式I/O (Blocking I/O)。相应地,异步式I/O (Asynchronous I/O)或非阻塞式I/O (Non-blocking I/O)则针对所有I/O 操作不采用阻塞的策略。当线程遇到I/O 操作时,不会以阻塞的方式等待I/O 操作的完成或数据的返回,而只是将I/O 请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O 操作时,以事件的形式通知执行I/O 操作的线程,线程会在特定时候处理这个事件。为了处理异步I/O,线程必须有事件循环,不断地检查有没有未处理的事件,依次予以处理。阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个线程所使用的CPU 核心利用率永远是100%,I/O 以事件的方式通知。在阻塞模式下,多线程往往能提高系统吞吐量,因为一个线程阻塞时还有其他线程在工作,多线程可以让CPU 资源不被阻塞中的线程浪费。而在非阻塞模式下,线程不会被I/O 阻塞,永远在利用CPU。多线程带来的好处仅仅是在多核CPU 的情况下利用更多的核,而Node.js的单线程也能带来同样的好处。这就是为什么Node.js 使用了单线程、非阻塞的事件编程模式。单线程事件驱动的异步式I/O 比传统的多线程阻塞式I/O 究竟好在哪里呢?简而言之,异步式I/O 就是少了多线程的开销。对操作系统来说,创建一个线程的代价是十分昂贵的,需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。①当然,异步式编程的缺点在于不符合人们一般的程序设计思维,容易让控制流变得晦涩难懂,给编码和调试都带来不小的困难。习惯传统编程模式的开发者在刚刚接触到大规模的异步式应用时往往会无所适从,但慢慢习惯以后会好很多。尽管如此,异步式编程还是较为困难,不过可喜的是现在已经有了不少专门解决异步式编程问题的库(如async)

 

转载于:https://www.cnblogs.com/ElvinLong/p/3622174.html

Openclaw错误分析与解决方案之:Agent couldn’t generate a response. Openclaw错误分析与解决方案之:Agent couldn't generate a response. Note: some tool actions may have already been executed — please verify before retrying. 阅读详情

相关推荐

From Manual to Magic: How nnU-Net is Revolutionizing Biomedical Image Segmentation Without Human Int

本文探讨了nnU-Net如何通过全自动深度学习技术革新生物医学图像分割领域。作为自我配置的智能系统,nnU-Net无需人工干预即可完成从数据预处理到模型训练的全流程,显著提升医学影像分割的效率和精度,尤其在CT和MRI影像分析中表现卓越。

metal的博客 1082

JavaScript学习笔记(二)------Node.js

面向对象编程 面向对象编程 将对象的__proto__属性指向另一个对象,实现继承。 Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有。...

yijiull 255

Vscode + QT + CMake:高效开发环境搭建全攻略

本文详细介绍了如何搭建Vscode+QT+CMake高效开发环境,涵盖环境安装、配置优化及项目创建全流程。通过整合Vscode的轻量化编辑、QT的跨平台GUI开发以及CMake的现代构建管理,该组合特别适合大型QT项目和跨平台开发团队,能显著提升开发效率。

weixin_30338481的博客 504

Node.js学习笔记(二)——Node.js内置模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

weixin_56370772的博客 692

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 774

手把手教你用P-MOS管搭建双电源自动切换电路(含AO3401选型指南)

本文提供了一份基于P-MOS管AO3401构建高可靠双电源自动切换电路的实战指南。文章详细对比了继电器、理想二极管与MOS管方案的优劣,深入解析了AO3401的关键参数选型,并手把手指导了从原理图设计、PCB布局到上电调试的全过程,旨在帮助硬件工程师和创客以极低成本实现无缝、高效的电源冗余方案。

moss5的博客 1232

Node.js学习笔记二

五、过渡内容 模块系统 核心模块 第三方模块 art-template 必须通过npm来下载才可以使用 自己写的模块 自己创建的文件 npm package.json Express 第三方Web开发框架 高度封装了http模块 更加专注于业务,而非底层 增删改查 使用文件来保存数据 MongoDB 所有方法都封装好了 什么是模块化 文件作用域 通信规则 加载require 导出 CommonJS模块规范 在Node中的JavaScrip

qq_45448654的博客 340

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧

本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。

weixin_29234509的博客 397

Node.JS学习笔记二

1.在node中,Buffer类是随着node内核一起发布的核心库。Buffer库为Node.JS 带来了一种存储原始数据的方法,可以让Node处理二进制的数据。几个Buffer模块常用的方法如下:①new Buffer(size);new Buffer(buffer);new Buffer(str,codetype);②buf.length ; buf.write(string...);③buf...

muxin_hgk的博客 165

信号处理仿真:自适应信号处理_(8).自适应信道均衡

在无线通信系统中,信道的多径效应和时变特性会导致信号的失真,从而影响通信质量。自适应信道均衡技术通过实时调整均衡器的参数,以补偿信道失真,提高信号的质量和可靠性。本节将详细介绍自适应信道均衡的原理、算法和实现方法,并通过具体的仿真例子来说明其应用。

2401_87715305的博客 1039

15 RK3568 RTL8111 PCIE

我这边扩了三个网卡。pcie3.0拆分了1+1lane。需要注意自己的reset引脚修改为自身rtl引脚即可。1、调试pcie 扩展网卡 RTL8111。

qq_39451352的博客 179

Node.js学习笔记(二) Express框架

Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架

kianagrow的博客 535

康耐视visionpro-CogBlobTool工具详细说明

康耐视visionpro-CogBlobTool工具详细说明

视觉人机器视觉的博客 1724

node.js零基础学习笔记 二

文章目录前言一、Node.js 事件循环1、事件驱动程序 前言 一、Node.js 事件循环 Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函

weixin_45131334的博客 1516

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Node.js学习笔记(二)

node.js学习笔记(二) Node.js Buffer(缓冲区) Javascript 语言自身只有字符串数据类型,没有二进制数据类型。 但在处理TCP流或文件流时,必须用到二进制数据。因此在Node.js中,专门定义了一个Buffer类,该类用来创建一个专门用来存放二进制数据的缓冲区。 在Node.js 中,Buffer类是随Node 内核一起发布的核心库.Buffer类为Node.js带来...

NoSuchObjectError的博客 333

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Node.js学习笔记(二)

一 ECMAScript 6常用语法 1 let(变量)与const(常量) let主要特性: 不存在变量提升问题,只有定义之后才能使用此变量 有{ }作用域 const主要特性: 不存在变量提升问题,只有定义之后才能使用此变量 const 定义的常量,无法被重新赋值 当定义常量的时候,必须定义且初始化,否则报语法错误 const 定义的常量,也有 块级作用域 2 变量的解构赋...

denghuocc 210

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《深入浅出Node.js》学习笔记——(二)模块机制

JavaScript的变迁   2.1 CommonJS规范 希望JavaScript能够在任何地方运行 2.1.1 CommonJS的出发点 针对JavaScript自身的缺陷: ①没有模块系统 ②标准库较少 ③没有标准接口 ④缺乏包管理系统   希望不仅可以利用JavaScript开发富客户端应用还可以编写: ①服务器端JavaScript应用程序 ②命令行工具 ③

w_Slide的专栏 1994

node.js学习笔记(二)模块的调用

模块 在JavaScript中,每个JavaScript文件都被当做一个模块使用,而我们也可以通过npm从网上下载所要依赖的模块 模块的调用 常用模块的调用 在node.js中,我们经常会使用调用模块来实现各种功能,我们看看node.js官网的一段创建服务器的代码 const http = require('http'); const hostname = '127.0.0.1'; ...

zem 434

node.js 学习笔记(二)简单使用

上次我们介绍了node 的定义和作用以及怎么安装,这次说说它的模块化系统 一、如何使用node执行js文件? 可以用cmd或git base here执行 先建一个简单的js文件,输入如下 var foo = 'hello nodejs' console.log(foo) 然后定位到该文件位置打开终端,输入 node helloworld.js——hellowor...

189

Node.js学习笔记(二、NPM 使用)

介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: .允许用户从NPM服务器下载别人编写的第三方包到本地使用。 .允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 .允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。 使用 npm...

三分恶的博客 833

Node.js 学习笔记(二)

express是nodejs的一个轻量级框架。 express的功能很简单, 功能依赖中间件。 安装:在你的项目文件价里打开cmd窗口,在里面使用npm工具(就是在cmd里输入 npm install express)下载express。 用法: 1.创建服务: var server=express(); 2.监听 server.list...

diaodui8296的博客 154

数据仓库建设核心指南:分层模型与指标口径的工程化实践

数据仓库是企业数据分析的基础设施,它不只是表的堆砌,更是业务问题的答案库。通过合理的分层设计(ODS、DWD、DWS、ADS)实现数据整合与复用,依靠维度建模沉淀细粒度事实表和维度快照,确保查询效率与历史准确性。指标口径的统一需要原子指标与派生指标的体系化定义,避免多方统计数字打架。数据血缘与元数据管理则为追溯、排查和治理提供保障。本文从数仓的本质出发,结合工程实践,梳理构建稳定、可解释数据资产的关键方法,适用于因口径混乱、模型难维护而困扰的数据工程师。

weixin_33895475的博客 422

Node.js学习笔记二之版本问题

一、版本说明 进入node.js官网https://nodejs.org/en/download/ 点击上面的【All download options】进入到所有下载列表的地址 下载地址:https://nodejs.org/dist/ 0.是Joyent公司维护.进展缓慢.但是稳定. 4.,5.*都是由网友维护的.相对的进展快,增加和许多新功能. 偶数开头的是稳定...

208

Node.js API学习笔记(二)

本文发表于本人博客。 上一节笔记说到创建Buffer实例,这节继续讲Buffer。本节讲解下Buffer的一些静态方法、写入以及读取方法。 Buffer.isEncoding(编码)判断nodejs是否支持此编码 console.log(Buffer.isEncoding("gb2312"));//不管过程怎么node都不支持这个编码,死记 consol...

weixin_30414635的博客 105

Node.js学习笔记(二)—— 模块化

我们开始来写Node程序了。一个应用,可以分为很多部分,如何将这些部分有条理的组合在一起,使得代码更健壮,更丰满,耦合度更低呢?本文将抛砖引玉,细细为您道来。

熊猫正尽责 1万+
上一篇: netlink 编程介绍(V0.2)
下一篇: iOS 分类思想(1)
weixin_30480075
博客等级 码龄11年 105粉丝 1390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值