快速教程:https://www.runoob.com/nodejs/nodejs-http-server.html
以下内容摘自《nodejs真的是单线程吗? 》https://segmentfault.com/a/1190000014926921
- 其实只有js执行是单线程,I/O显然是其它线程。 js执行线程是单线程,把需要做的I/O交给libuv,自己马上返回做别的事情,然后libuv在指定的时刻回调就行了。
- Node.js 通过 libuv 来处理与操作系统的交互,并且因此具备了异步、非阻塞、事件驱动的能力。因此,NodeJS能响应大量的并发请求。所以,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。
- 如果操作系统本身就是单核,那也就算了,但现在大部分服务器都是多 CPU 或多核的,而 Node.js 只有一个 EventLoop,也就是只占用一个 CPU 内核,当 Node.js 被CPU 密集型任务占用,导致其他任务被阻塞时,却还有 CPU 内核处于闲置状态,造成资源浪费。 其实虽然Node.js可以处理数以千记的并发,但是一个Node.js进程在某一时刻其实只是在处理一个请求。 因此,Node.js 并不适合 CPU 密集型任务。
使用淘宝 NPM 镜像
npm install -g cnpm --registry=https://registry.npmmirror.com
之后用cnpm取代npm,例如cnpm init等。
或者直接设置淘宝镜像
npm config set registry https://registry.npm.taobao.org
Node.js创建第一个应用
创建hello.js如下:
let http = require("http"); // 第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。 http.createServer((req, resp) => { resp.writeHead(200, {'Content-Type': 'text/plain'}); resp.end('Hello World\n'); }).listen(8888); console.log('Server running at http://127.0.0.1:8888/');
执行:node hello.js
打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 "Hello World"的网页。
Node.js 回调函数
用非阻塞代码读文件
let fs = require("fs"); // 回调函数一般作为函数的最后一个参数出现 fs.readFile('input.txt', (err, data) => { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束! // 这条会先输出,然后才是文件内容");
Node.js简易HTTP服务器
https://www.npmjs.com/package/http-server
npm install --global http-server
如果是在项目里面使用,则采用局部安装
按照好后在对应的html页面下执行:
http-server
既可运行一个简易的HTTP服务器,通过http://localhost:8080/访问页面。