IO:数据的传输
input 输入
output 输出
关于进程与线程,队列,线程池理解,参考我的另一篇博客:https://blog.csdn.net/qq_28835447/article/details/94121838
异步的io操作和异步的非io操作理解:只要有数据的传输都是IO操作
异步的IO操作:
<link rel="stylesheet" type="text/css" href="css/index.css"/>
<img src= "./../img/img" />
异步script 加载
异步的非IO操作:
settimeout setIneterval
同步异步的区别?
同步会阻塞代码,异步不会阻塞代码
一条线程先执行同步的代码,主线程会调度线程池中的子线程去执行异步的代码,异步处理的结果什么时候完成什么时候再回到主线程中
什么是并发
一段时间内有多个程序在运行与运行完毕之间
const http = require(‘path‘)
path.basename(path)//文件名加后缀
path.basename(path,‘.后缀‘) //文件名
path.dirname(path)//仅仅只返回文件路径,不包含文件
path.extname(path)//返回文件后缀
引入http模块搭建服务器
const http = require(‘http‘) //引入模块,用来提供服务
const server = http.createServer(); //创建服务,用一个参数接受
server.on(‘request‘,function(request,response){ //监听请求对应的请求和响应,监听request事件,当有请求发送的时候,都会触发request事件,触发完成就会去执行一个callback
response.writeHead(200,{‘content-type‘:"text/html;charset=utf8"}); //请求头,
response.write(‘<h1>你好</h1>‘);
response.end(‘world‘) //结束,结束必须有,表示响应和请求已经结束
console.log(request.httpVersion);//描述HTTP协议版本,通常是1.0或者1.1
console.log(request.method) //描述HTTP请求方法,比如GET,POST,PUT,DELETE等
console.log(request.url) //描述原始的请求路径
})
server.listen(3000) //监听端口
request:请求形参
response:响应形参
response.writeHead(200,{‘content-type‘:"text/html;charset=utf8"}); 请求头,对应的文本,图片,JavaScript,css等都有与之对应
例子:
//引入模块 const fs = require(‘fs‘) const http = require(‘http‘); const path = require(‘path‘); const querystring = require(‘querystring‘); const url = require(‘url‘); const server = http.createServer();//创建服务 server.on(‘request‘,function(req,res){ //绑定请求事件 let urlObj = url.parse(req.url,true); //将请求地址转为对象 let query = urlObj.query; //请求参数 let pathname = urlObj.pathname //请求地址 if (pathname == ‘/index.html‘ && req.method == ‘GET‘) { //当为GET请求时 res.end(‘0‘) } else if(pathname = ‘/index.html‘ && req.method == ‘POST‘){ //当为POST请求时 var data = ""; //作为容器 ,存储请求参数 req.on(‘data‘,function(chunk){ //绑定监听请求参数 console.log(chunk) //参数以buffer对象 data +=chunk }) req.on(‘end‘,function(){ //绑定请求结束时 let obj = querystring.parse(data); //将buffer对象打包为对象转为对象字符串形式 console.log(obj) res.end("1") }) } }) server.listen(3000);
搭建静态伺服
const http = require("http"); const fs = require("fs"); const url = require("url"); const path = require("path"); const querystring = require("querystring"); const server = http.createServer();
server.on(‘request‘,(req,res) =>{ let urlObj = url.parse(req.url,true) let query = urlObj.query; let pathname = urlObj.pathname; let query_uname = query.uname; //静态伺服部分 if(pathname == "/register.html" && req.method == "GET"){ fs.readFile("./src/register.html","utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{‘content-type‘:"text/html;charset=utf8"}); res.end(data); }) } else if(pathname == "/css/register.css" && req.method == "GET"){ fs.readFile("./src/css/register.css","utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{‘content-type‘:"text/css;charset=utf8"}); res.end(data); }) } else if(pathname == "/js/register.js" && req.method == "GET"){ fs.readFile("./src/js/register.js","utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{‘content-type‘:"text/javascript;charset=utf8"}); res.end(data); }) }
})
server.listen(3000)
封装写法
const http = require("http"); const fs = require("fs"); const url = require("url"); const path = require("path"); const querystring = require("querystring"); const server = http.createServer(); server.on(‘request‘,(req,res) =>{ let urlObj = url.parse(req.url,true) let query = urlObj.query; let pathname = urlObj.pathname; let query_uname = query.uname; //静态伺服封装 function jintai(pathname,method){ let getext = path.extname(pathname); //文件后缀名 if (method == ‘GET‘) { if (getext == ".html") { getext = ""; } if (getext == ‘css‘ ||‘js‘||"jpg" ||"png" || "gif" ||"html") { fs.readFile("./src"+pathname,"utf8",(err,data) => { if(err){ res.end("404"); return; } res.writeHead(200,{‘content-type‘:getExt(pathname)}); res.end(data); }) } } } jintai(pathname,req.method) //兼容文件格式 function getExt(pathname){ var getext = path.extname(pathname);//文件的后缀名 var ext = ‘‘ if(getext == "html"){ ext = "text/html;charset=utf8"; } if(getext == "css"){ ext = "text/css;charset=utf8"; } if(getext == "jpg"){ ext = "text/jpg;charset=utf8"; } if(getext == "png"){ ext = "text/png;charset=utf8"; } if(getext == "js"){ ext = "text/javascript;charset=utf8"; } if(getext == "gif"){ ext = "text/gif;charset=utf8"; } if(getext == "xml"){ ext = "text/xml;charset=utf8"; } return ext; } }) server.listen(3000)
原文:https://www.cnblogs.com/wxyblog/p/11311328.html