美文网首页
WEB__backend--nvm

WEB__backend--nvm

作者: 33jubi | 来源:发表于2020-02-29 22:01 被阅读0次

nvm安装

网上搜教程
国内用阿里的镜像

nvm install 10//安装特定版本(默认安装最新)
nvm alias default 10 //切换默认版本到10
nvm use 10 //临时切换版本
npm i yarn@1.21.0//安装特定版本号

which node//查找nvm版本号

touch .nvmrc//创建一个新文件

WebServer(计算机网络)

TCP/HTTP (路由器转发tcp-<三次握手-聊天,成本高不易遗失数据>/udp<视频/游戏直播,广播成本低容易遗失数据>协议)
DNS

//知乎回答
作者:南派二叔
链接:https://www.zhihu.com/question/20513729/answer/96332435
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

假设你用一个全新的浏览器(第一次启动的那种),访问百度(http://www.baidu.com/),在你敲入网址并按下回车之后,将会发生以下神奇的事情:

浏览器先尝试从Host文件中获取http://www.baidu.com/对应的IP地址,如果能取到当然万事大吉大家都能嗨,如果不能,就使用DNS协议来获取IP咯。

在DNS协议中,PC会向你的本地DNS服务器求助(一般是路由器),希望从本地DNS服务器那里得到百度的IP,得到就好,得不到还得向更高层次的DNS服务器求助,最终总能得到百度的IP。

得到百度的IP,下一步是使用TCP协议,建立TCP连接。

在TCP协议中,建立TCP需要与百度服务器握手三次,你先告诉服务器你要给服务器发东西(SYN),服务器应答你并告诉你它也要给你发东西(SYN、ACK),然后你应答服务器(ACK),总共来回了3次,称为3次握手。

不过,建立TCP连接有个前提(或者说给服务器发消息有个前提):你必须能成功地把消息发到服务器上。虽然已经知道IP,但并无啥用(比如说,你在广东,你知道北京的地理坐标经纬度就能到北京了?你得知道有哪些路通往北京吧你得准备盘缠吧你得花时间吧)。

为了将消息从你的PC上传到服务器上,需要用到IP协议、ARP协议和OSPF协议。

我们都知道,你的PC和百度服务器之间一般会有许多路由器之类的东西,IP协议指定了出发地(你的PC)和目的地(服务器);你的数据会经过一个又一个路由器,OSPF决定了会经过那些路由器(用一种叫路由算法的玩意,找出最佳路径);从一个路由器怎么传给下一个路由器?这是ARP协议的JOB,ARP负责求下一个节点的地址(我们不止是要目的地,还要中间节点的地址)。
IP协议使用的是IP地址,整个发送过程中只涉及出发地和目的地2个IP地址,而ARP协议使用的是MAC地址,整个发送过程中涉及到每一个节点的MAP地址

现在,我们能和服务器通信,还建立了TCP连接,下一步干嘛,当然是用HTTP协议请求网页内容咯。

你发个HTTP请求报文给服务器,如果服务器禁止你访问它就给你回个"Forbidden",如果它暂时挂掉了就给你回个“内部服务错误”,如果它正常才给你回个“OK“并将你要的数据传给你;如果你还需要其它的东西再去跟它要(它一般还会给你的-_-)。

你收到了服务器的回复,是一坨HTML形式的文本。浏览器必须要能够理解文本的内容,并快速地渲染到屏幕上(浏览器一般用有限自动机来理解文本内容,渲染的话就各看本事了,之所以微软IE卡成狗而谷歌浏览器很6,就是它们的渲染速度不同...)

渲染出来后,你就看到百度的首页了

Web Frameworks

  • A:强大/一站式(中小型个人项目),很难替换内部组件,不轻巧
  • B:微内核框架——源代码非常简单,轻巧,可扩展

Express

Koa(可以读一下源代码)

Callback

mv a b把a改名为b

  'use strict';

// requireAnimation

//Common JS

  const  fs = require('fs');

// const content = fs.readFileSync('./text.txt','utf-8');

//const content = fs.readFileSync('./text.txt');

  const  content = fs.readFile('./text.txt','utf8',(err,data)=>        {

  if(!err){

    console.log(data);

  }else{

    console.error(err);

    }

});
//readFile三个参数,第一个参数ok按第二个参数解码,告诉eventloop,放在等待队列,当eventloop发现读取文件完成就会把它放到之前的队列里,然后排队排到了放在第三个参数(function。
/toString()默认参数utf8

//console.log(content.toString());

console.log("s");

先执行console.log("s");
readFile三个参数,第一个参数是一个open()过程,第一个参数ok按第二个参数解码,告诉eventloop,放在等待队列,当eventloop发现读取文件完成readfile完成就会把它放到之前注册的callback队列里,然后从callback中拿出放在第三个参数(function)。

异步
process.nextTick( )

function  hello(){

console.log('hello');

}

function  say(fn){//参数是一个function

//fn()同步

process.nextTick(fn);//异步

}

say(hello);

Promise

(1).then(data=>{//正确处理},err=>{//错误处理})
(2)为了避免代码冗余
.then(data=>{//正确处理}).catch(err=>{//错误处理;
});
(3)现在常见的处理方法,最优的处理方法

(async()=>{

try{

const  content = await  readFile('./text.txt','utf8');

console.log(content);

console.log("s");

}catch{

console.log(err)

}

})();

//async函数不能凭空出现,要和await一起

KEA

npm init
npm i kea

'use strict';

const  Koa = require('koa');

const  app = new  Koa();

//Middleare

app.use(async(ctx,next)=>{

ctx.text="hello";

await  next();

ctx.body += "!";

});

app.use(async(ctx,next)=>{

ctx.body=`${ctx.text},world!`

});

app.listen(3000);

request--------进到中心------response
洋葱模型

相关文章

  • WEB__backend--nvm

    nvm安装 网上搜教程国内用阿里的镜像 WebServer(计算机网络) TCP/HTTP (路由器转发tc...

网友评论

      本文标题:WEB__backend--nvm

      本文链接:https://www.haomeiwen.com/subject/dfeihhtx.html