博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js入门概念讲解
阅读量:5752 次
发布时间:2019-06-18

本文共 2349 字,大约阅读时间需要 7 分钟。

本文通过简单易懂的方式(例子+概念)讲解了以下几个http进阶概念,同时联系node.js,讲解了node.js中的HTTP原理。大家在看这篇文章之前,希望先确保了解了罗列的概念。

因为本文只是用最简单的Node来讲解,所以也适用于非Node学习者。

什么是回调?

例子

你打饭店电话问老板有没有位子,老板说他去看一下,然后就挂了电话,你去做别的事情,老板找了好久找到了位子,然后再重新拨通你的电话告诉你。老板找到位子后回拨电话这个动作叫做回调。

概念

回调函数就是某个函数执行完毕后执行的函数。

联系Node.js

//回调函数为具名函数function learn(something) {  console.log(something);}function we(callback, something) {  something += ' is cool';  callback(something);}we(learn, 'Nodejs');//回调函数为匿名函数we(function(something) {  console.log(something);},'Jade');//输出:Nodejs is coolJade is cool

什么是同步/异步?

例子

同步:你打饭店电话问老板有没有位子,老板说他去看一下,然后不挂电话,你一直等在电话前,老板找了好久找到了位子,然后告诉你。这个过程就叫同步。

异步:你打饭店电话问老板有没有位子,老板说他去看一下,然后就挂了电话,你去做别的事情,老板找了好久找到了位子,然后再重新拨通你的电话告诉你。这个过程就叫异步。

概念

同步:各个任务依次执行,下一个任务等待上一个任务完成之后再执行。

异步:各个任务独立执行,A任务不需要等到B任务完成,就可以先执行,直到B任务调用回调函数。

联系Node.js

在Node.js中,setTimeout(),setInterval()就是最基本的异步函数。

var c = 0function printIt() {  console.log(c)}function plus(callback) {  setTimeout(function() {    c += 1    callback()  },1000)}plus(printIt)

什么是I/O?

概念

I:input,磁盘的写入。

O:output,磁盘的读出。

联系Node.js

在Node.js中,指代的就是一些读写的接口。

什么是单线程/多线程?

例子

单线程:你谈女朋友,一次只能谈一个,谈完了这个才能谈下一个,这个就叫单线程。所以单线程安全。

多线程:如果你有能力脚踏多只船,那么这就叫多线程。如果你处理得好,平时的时候相安无事。但有时候你犯傻逼,女朋友们上房揭瓦,这个就叫争抢资源。

概念

单线程:只有到前面的流程执行完之后,才会执行下一个流程。

多线程:同时执行多个程序。

联系Node.js

Node.js就是一门单线程语言

什么是阻塞/非阻塞?

例子

阻塞:你打饭店电话问老板有没有位子,老板说他去看一下,你挂下电话什么事都不做,一直等到老板查好位置来找你。这时候你的状态就做阻塞。

非阻塞:你打饭店电话问老板有没有位子,老板说他去看一下,你挂下电话跑去看电视玩电话,老板查好位置来找你的时候你在去考虑吃饭的事情。这时候你的状态就叫做非阻塞。

概念

阻塞:前一个程序要等待后一个程序完成之后才能执行,前一个程序的状态叫做阻塞。

var i = 0;while(1) {  i++}//这段程序对其他程序产生了阻塞

非阻塞:前一个程序无需等待后一个程序完成之后才执行,前一个程序的状态叫做非阻塞。

单线程、回调、异步、非阻塞,结合Node.js的一句话总结

对于单线程的Node.js,我们可以通过回调的方式,实现异步编程,达到非阻塞的效果。

为了讲解Node.js里的回调函数何时被调用,我们需要讲解什么是事件和事件驱动。

什么是事件?

在浏览器中,鼠标点击是事件,拖动窗口也是事件.

function clickIt(e) {  window.alert('Button is clicked')}var button = document.getElementById('#button')button.addEventListener('click',clickIt)//按钮被触发了click事件之后,执行回调函数clickIt

什么是事件驱动?

像如下代码中的clickIt函数执行的方式(被click事件触发)称为事件驱动

function clickIt(e) {  window.alert('Button is clicked')}var button = document.getElementById('#button')button.addEventListener('click',clickIt)//按钮被触发了click事件之后,执行回调函数clickIt

什么是事件循环?

概念

  • 当存在很多事件触发的回调函数排队等待处理时,处理这些回调函数的管理机制称为事件循环。

  • 事件循环是一个回调函数队列,当有异步操作时,就将回调函数压入这个队列,等待处理。

  • 事件循环是一个先进先出的任务队列

  • 整个队列可以理解成一个普通函数和回调函数构成的完整的队列

后话

只有理解了以上这些看似很空的概念之后,才能深入学习node.js的http。希望大家和我一起努力,如果有不理解的地方希望大家能够和我一起在评论区讨论。

如对我的文章感兴趣,请关注微信公众号“每日前端”,每天分享一篇优质前端文章。 图片描述

转载地址:http://fcukx.baihongyu.com/

你可能感兴趣的文章
如何成为一个C++高级程序员
查看>>
ant android 打包签名和渠道
查看>>
linux命令学习(1)-awk
查看>>
一个简单的接口,被调用并同步给出响应的方法
查看>>
Hadoop序列化与压缩
查看>>
由“男怕入错行”说开去
查看>>
php-fpm多实例运行
查看>>
CGImageSource对图像数据读取任务的抽象
查看>>
我的友情链接
查看>>
xss test
查看>>
也谈svn分支与合并
查看>>
显式锁(第十三章)
查看>>
微软超融合私有云测试29-SCDPM2016部署之创建保护组备份(备份虚拟机)
查看>>
LBS“他爹”GIS
查看>>
SCCM的证书配置PKI
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
CString、Char* ,char [20]、wchar_t、unsigned short转化
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>