-
1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。 3. 什么是I/O? 磁盘的写入(in)磁盘的读取(out) 4. 什么的单线程/多线程? 一次只能执行一个程序叫做单线程 一次能执行多个程序叫多线程 5. 什么是阻塞/非阻塞? 阻塞:前一个程序未执行完就得一直等待 非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行 6. 什么是事件? 一个触发动作(例如点击按钮) 7. 什么是事件驱动? 一个触发动作引起的操作(例如点击按钮后弹出一个对话框) 8. 什么是基于事件驱动的回调? 为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回调函数,这种函数执行的方式叫做事件驱动~这种注册回调就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作有关,可以看作是基于回调的异步I/O,只不过这种回调在nodejs中是有事件来驱动的 9. 什么是事件循环? //事件循环Eventloop,倘若有大量的异步操作,一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,从而来完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环. 总而言之就是:管理大量异步操作的机制叫做事件循环 Event Loop: 回调函数队列。异步执行的函数会被压入这个队列; 队列被循环查询。查看全部
-
var http=require('http'); http.createServer(function(req,res){ res.writeHead(200,{'Content-Type':'text/plain'}); res.end('Hello \n'); }).listen(1337,'127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');查看全部
-
xports与module.exports的区别:http://www.jb51.net/article/33269.htm查看全部
-
想象用浏览器打开imooc.com网站,HTTP走过的环节: 1.首先,是对imooc.com域名解析, (1.1)浏览器搜索浏览器自身的DNS缓存。 (1.2)如果浏览器没有找到自身的DNS缓存或之前的缓存已失效,那么浏览器会搜索操作系统自身的DNS缓存。 (1.3)如果操作系统的DNS缓存也没有找到,那么系统会尝试在本地的HOST文件去找。 (1.4)如果在HOST里依然没有找到,浏览器会发起一个DNS的系统调用,即一般向本地的宽带运营商发起域名解析请求。这后面又可以试情况分很多步骤,第一,宽带运营商服务器会首先查看自身的缓存,看是否有结果,如果没有,那么运营商服务器会发起一个迭代DNS解析请求(根域,顶级域,域名注册商),最终会返回对DNS解析的结果。运营商服务器然后把结果返回给操作系统内核(同时也缓存在自己的缓存区),然后操作系统把结果返回给浏览器。 (1.5)以上的最终结果,是让浏览器拿到imooc.com的IP地址,DNS解析完成。 2.然后,在浏览器获得域名的IP地址后,发起“三次握手”,建立TCP/IP连接。 3.在TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。比如,用HTTP的GET方法请求一个根域里的某个域名,协议可以采用HTTP 1.0 。 4.服务器端接受这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果以数据的形式返回给浏览器,如果是imooc.com网站的页面,服务器就会把完整的HTML页面代码返回给浏览器。 5.浏览器拿到了imooc.com这个网站的完整HTML页面代码,在解析和渲染这个页面的时候,里面的Javascript、CSS、图片等静态资源,它们同样也是一个个HTTP请求,都需要经过上面的步骤来获取。 6.浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现出来。 可以简单地把http拆分成请求和响应,然后他们都有http头和正文信息查看全部
-
老师,能否搞一点深入的教程。 老是搞入门。。。查看全部
-
域名解析
1、浏览器搜索自身的DNS缓存,eg. chrome://net-internal/#dns
2、搜索操作系统自身的DNS缓存
3、读取本地的host文件
4、浏览器发起一个DNS的一个系统调用
- 宽带运营商服务器查看本身缓存
- 代替浏览器发起一个迭代DNS解析请求
- 运营商服务器把结果返回操作系统内核同时缓存起来
- 操作系统内核把结果返回浏览器
- 浏览器拿到对应的IP地址
5、浏览器获得IP地址后,发起http三次握手
- TCP 链接请求 ,经过TCP/IP协议栈,最终到达服务端,建立连接
6、TCP/IP连接建立起来后,浏览器就可以向服务器发送http请求了。
7、接受请求,响应请求,返回数据。
8、浏览器拿到响应数据。
9、浏览器开始渲染页面,或者其他操作。
查看全部 -
在此记录下,评论成功的代码:
var https = require('https')
var querystring = require('querystring')
var postData = querystring.stringify({
'content': '老师辛苦了....',
'mid': 8837
})
var options = {
hostname:'www.imooc.com',
port:443,//http默认端口80,https默认端口443
path:'/course/docomment',
method:'POST',
headers:{//request headers
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control':'no-cache',
'Connection':'keep-alive',
'Content-Length': postData.length,
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': '【>>>>>>>>>>>>填写自己的Cookie>>>>>>>>>>>>】',
'Host':'www.imooc.com',
'Pragma':'no-cache',
'Referer':'https://www.imooc.com/video/8837',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
'X-Requested-With':'XMLHttpRequest'
}
}
var req = https.request(options,function(res){
console.log('status:'+res.statusCode);
console.log('headers:'+JSON.stringify(res.headers));
res.on('data', function(chunk){
console.log(Buffer.isBuffer(chunk));
console.log(typeof chunk);
})
res.on('end',function(){
console.log('评论完毕');
})
})
req.on('error',function(e){
console.log('Error:'+e.message);
})
req.write(postData);
req.end();
查看全部 -
1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。 3. 什么是I/O? 磁盘的写入(in)磁盘的读取(out) 4. 什么的单线程/多线程? 一次只能执行一个程序叫做单线程 一次能执行多个程序叫多线程 5. 什么是阻塞/非阻塞? 阻塞:前一个程序未执行完就得一直等待 非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行 6. 什么是事件? 一个触发动作(例如点击按钮) 7. 什么是事件驱动? 一个触发动作引起的操作(例如点击按钮后弹出一个对话框) 8. 什么是基于事件驱动的回调? 为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回调函数,这种函数执行的方式叫做事件驱动~这种注册回调就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作有关,可以看作是基于回调的异步I/O,只不过这种回调在nodejs中是有事件来驱动的 9. 什么是事件循环? //事件循环Eventloop,倘若有大量的异步操作,一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,从而来完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环. 总而言之就是:管理大量异步操作的机制叫做事件循环 Event Loop: 回调函数队列。异步执行的函数会被压入这个队列; 队列被循环查询。
查看全部 -
想让模块成为特别的对象类型,使用module.export; 想让模块成为传统的模块实例,使用export. module.export是真实存在的东西, export是module.export的辅助方法。 module.export最终返回给调用者; export挂载属性和方法,然后把属性赋给module.export 如果module.export已经有了属性,那么export上的属性会被忽略 推荐export方式查看全部
-
http.js下: 调用createServer实际上是返回Server实例,createServer里面的回调函数(参数requestListener)直接作为了Server的参数requestListener 而这个Server实际上是require('_http_server') _http_server.js下: fuction Server(requestListener)里面实际上是为这个requestListener函数与'request'事件绑定到了一起 而'request '是方法parserOnIncoming里面抛出的一个事件,见488行self.emit('request'.req,res);这个事件也会同时抛出req和res两个对象 关于req与res两个变量: 其中,428行可知req变量与另一个叫做shouldKeepAlive的变量作参同时传入此函数parserOnIncoming 而,由437行可见res变量是new ServerResponse(req)出来的实例 见101行可见ServerResponse的定义,再由函数体内部113行知此函数继承自OutgoingMessage 见37行: var outgoingMessage = require('_http_outgoing').OutgoingMessage; _http_outgoing.js下 67行为function OutgoingMessage的定义 见93行OutgoingMessage继承自Stream即为一个流的子类 由函数体内部67-91行可知此函数里面初始化的各种变量全是跟服务器返回的内容有关的东西 最终可得出res实际上是一个ServerResponse,而ServerResponse是一个Stream,这个Stream里面全是各种服务器返回的各种内容属性(见_http_outgoing.js里的67-91行啊啊)查看全部
-
@模块与包管理工具 js的天生缺陷——缺少模块化管理机制 ·表现>> JS中容易出现变量被覆盖,方法被替代的情况(既被污染)。特别是存在依赖关系时,容易出现错误。这是因为JS缺少模块管理机制,来隔离实现各种不同功能的JS判断,避免它们相互污染。 ·解决>> 经常采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行。jQuery中有许多变量和方法,但是无法直接访问,必须通过jQuery,$调用 各个方法。 【Commonjs规范】 不同于jQuery,Commonjs是一套规范,约定了js如何组织,如何编写,包括包,二进制,套接字,单元测试等等。大部分标准在拟定和讨论之中,首先把执行不同任务的代码块和代码文件看为独立的模块,每一个模块都是一个单独的作用域,但不是孤立的,可能存在依赖关系。每个模块分为三个部分,定义、标识和引用。这套规范与现实产品如node.js相互影响,良性循环。 【NodeJs的模块管理机制】 基于commonjs实现了模块管理系统。node中每一个js文件都是一个独立的模块,在其内部不需要有命名空间,不需要担心变量的污染和方法定义时的隔离。同时模块之间可以组合形成更强大的模块或功能包。npm即是用来管理各种功能包的。查看全部
-
Nodejs中http模块不解析请求的具体内容,只分离出请求头和请求体 1、什么是回调函数? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2、什么事同步/异步? 同步:发送方发送数据后,等待接收方发回响应以后才发下一个数据包的通讯方式 异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式 3、什么事I/O? 文件系统里面 磁盘的写入(in)磁盘的读取(out) 4、什么是单线程/多线程? 一次只能执行一个程序叫做单线程 一次能执行多个程序叫做多线程 5、什么是阻塞/非阻塞? 阻塞:前一个程序未执行完就得一直等待 非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行 6、什么是事件? 一个触发动作(例如点击按钮) 7、什么是事件驱动? 一个触发动作引起的操作(例如点击按钮后弹出一个对话框) 8、什么是基于事件驱动的回调? 为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回掉函数,这种函数执行的方式叫做事件驱动~这种注册回掉就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作相关,可以看作是基于回调的异步I/O。只不过这种回调在nodejs中是由事件来驱动的 9、什么是事件循环? 事件循环Eventloop,倘若有大量的异步操作,如一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,而从完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环 总而言之,管理大量异步操作的机制叫做事件循环 EventLoop: 回调函数队列,异步执行的函数会被压入这个队列;队列被循环查询。查看全部
-
Nodejs中http模块不解析请求的具体内容,只分离出请求头和请求体 1、什么是回调函数? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2、什么事同步/异步? 同步:发送方发送数据后,等待接收方发回响应以后才发下一个数据包的通讯方式 异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式 3、什么事I/O? 文件系统里面 磁盘的写入(in)磁盘的读取(out) 4、什么是单线程/多线程? 一次只能执行一个程序叫做单线程 一次能执行多个程序叫做多线程 5、什么是阻塞/非阻塞? 阻塞:前一个程序未执行完就得一直等待 非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行 6、什么是事件? 一个触发动作(例如点击按钮) 7、什么是事件驱动? 一个触发动作引起的操作(例如点击按钮后弹出一个对话框) 8、什么是基于事件驱动的回调? 为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回掉函数,这种函数执行的方式叫做事件驱动~这种注册回掉就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作相关,可以看作是基于回调的异步I/O。只不过这种回调在nodejs中是由事件来驱动的 9、什么是事件循环? 事件循环Eventloop,倘若有大量的异步操作,如一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,而从完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环 总而言之,管理大量异步操作的机制叫做事件循环 EventLoop: 回调函数队列,异步执行的函数会被压入这个队列;队列被循环查询。查看全部
-
1. Chrome搜索自身的DNS缓存 2. 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效) 3. 读取本地HOST文件 4. 浏览器发起一个DNS的系统调用 5. 宽带运营商服务器查看本身DNS缓存 6. 运营商服务器发起一个迭代的DNS解析的请求 7. 运营商服务器把结果返回给操作系统内核同时缓存起来 8. 操作系统内核把结果返回给浏览器 9. 最终浏览器难道了域名对应的IP地址 10. 浏览器获得域名对应的IP地址后,发起HTTP"三次握手" 11. TCP/IP连接建立后,浏览器向服务器发送HTTP请求,包括请求头和请求体 12. 服务器向浏览器返回响应结果,包括响应头和响应体 13. 浏览器收到响应之后进行渲染 在Chrome中通过chrome://net-internals/#dns可以查看Chrome浏览器的DNS缓存查看全部
-
@模块与包管理工具 js的天生缺陷——缺少模块化管理机制 ·表现>> JS中容易出现变量被覆盖,方法被替代的情况(既被污染)。特别是存在依赖关系时,容易出现错误。这是因为JS缺少模块管理机制,来隔离实现各种不同功能的JS判断,避免它们相互污染。 ·解决>> 经常采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行。jQuery中有许多变量和方法,但是无法直接访问,必须通过jQuery,$调用 各个方法。 【Commonjs规范】 不同于jQuery,Commonjs是一套规范,约定了js如何组织,如何编写,包括包,二进制,套接字,单元测试等等。大部分标准在拟定和讨论之中,首先把执行不同任务的代码块和代码文件看为独立的模块,每一个模块都是一个单独的作用域,但不是孤立的,可能存在依赖关系。每个模块分为三个部分,定义、标识和引用。这套规范与现实产品如node.js相互影响,良性循环。 【NodeJs的模块管理机制】 基于commonjs实现了模块管理系统。node中每一个js文件都是一个独立的模块,在其内部不需要有命名空间,不需要担心变量的污染和方法定义时的隔离。同时模块之间可以组合形成更强大的模块或功能包。npm即是用来管理各种功能包的。查看全部
举报