Jason
Jason
**关于你的链式调用** 链式调用是 promise 很重要的特性,借鉴的是 angularJs 的 $q,觉得可以这么实现: - then 方法也返回一个 promise - 返回的 promise 必须要用传给 then 方法函数的返回值,来设置(resolve)自己的 result - 传递给 then 方法的函数,必须返回 promise 或值 - 如果返回的是 promise,则必须等待这个 promise 处理后,才设置 result...
嗯,后续会将一些关键思路或者步骤记录下来。
### 网络分层模型和TCP/IP协议族 协议的战争: osi、tcp/ip **TCP/IP 的分层管理** TCP/IP 协议族分为4层:应用层、传输层、网络层和数据链路层 作用: - 应用层:决定了向用户提供应用服务时通信的活动,HTTP 协议也处于该层 - 传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输 - 网络层:又名网络互联层,用来处理在网络上流动的数据包 - 链路层:又名数据链路层、网络接口层,用来处理连接网络硬件部分(属于硬件范围) **OSI** 是由国际标准化组织ISO提出的 Open System Interconnection Reference Model,它的layer 7如下:  两者关系图谱如下: 
## TCP TCP/IP 也常被称为“因特网协议套件”,IP 即 Internet Protocol(因特网协议),负责联网主机之间的路由选择和寻址;TCP 即 Transmission Control Protocol(传输控制协议),负责在不可靠的传输信道之上提供可靠的抽象层。 ### 三次握手和四次挥手 TCP 提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接,采用4次挥手来关闭一个连接。 TCP 可以看成是一种字节流,它会处理 IP 层或以下的层的丢包、重复以及错误问题。 三次握手和四次挥手的状态转换如下图:  #### 三次握手: - 客户端主动发出连接请求的报文段,报文头部 SYN 置为 1,序号 seq 设置为...
### HTTP 协议 请求和响应报文的构成:   #### stateless HTTP 是一种不保存状态,即无状态协议(stateless)。它自身不具备保存之前发送过的请求或响应的功能,为了实现保持状态的功能,引入了 Cookie 技术。 #### 持久连接 最初每进行一次 HTTP 通信就要断开一次 TCP 连接;随着 HTTP 普及且传输数据越来越大,引入了持久连接(HTTP Persistent Connections,即 HTTP keep-alive 或 HTTP connection reuse)。特点是:只要任意一端没有明确提出断开连接,则保持 TCP...
## https #### http 有哪些不足: - 通信使用明文(不加密),内容可能会被窃听 - 不验证通信方的身份,因此有可能会被伪造 - 无法证明报文的完整性,所以内容可能已被篡改 图文并茂介绍: - [看完这篇文章,我奶奶都懂了https的原理](https://www.cnblogs.com/sujing/p/10927569.html) - [漫画:什么是 HTTPS 协议?](https://zhuanlan.zhihu.com/p/57142784) **相关细节可以再阅读阮一峰老师的** [SSL/TLS协议运行机制的概述](http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html) SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
### WebSocket > WebSocket 由多个标准构成: WebSocket API 是 W3C 定义的,而 WebSocket 协议(RFC 6455)及其扩展则由 HyBi Working Group(IETF)定义。 WebSocket 可以实现客户端与服务器间双向、基于消息的文本或二进制数据传输。WebSocket 连接远远不是一个网络套接字,因为浏览器在这个简单的 API 之后隐藏了所有的复杂性,而且还提供了更多服务: • 连接协商和同源策略; • 与既有 HTTP 基础设施的互操作; • 基于消息的通信和高效消息分帧; •...
### http 2.0 #### HTTP2 采用二进制格式传输 取代了 HTTP1.x 的文本格式,二进制格式解析更高效。关键之一就是在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。  在二进制分帧层中, HTTP2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码。 #### 多路复用 代替了 HTTP1.x 的序列和阻塞机制,所有的相同域名请求都通过同一个 TCP 连接并发完成。在 HTTP1.x 中,并发多个请求需要多个 TCP 连接,浏览器为了控制资源会有 6-8 个 TCP 连接都限制。...
### 观察者模式 vs 发布订阅模式 #### 观察者模式 所谓观察者模式,其实就是为了实现**松耦合(loosely coupled)**。 举个例子,当数据有更新,如 changed() 方法被调用,用来更新 state 数据,比如温度、气压等等。 这样写的问题是,如果想更新更多的信息,比如说湿度,那就要去修改 changed() 方法的代码,这就是紧耦合的坏处。 结合上面 RxJS 提到的 Observable 和 Subject,我们仅仅维护一个可观察者对象即可,即一个 Observable 实例,当有数据变更时,它只需维护一套观察者(Observer)的集合,这些 Observer 实现相同的接口,Subject 只需要知道,通知 Observer 时,需要调用哪个统一方法就好了。如下图: ...
### 手写一个观察者模式 ```js // 目标者类 class Subject { constructor() { this.observers = []; // 观察者列表 } // 添加 add(observer) { this.observers.push(observer); } // 删除 remove(observer) { let idx = this.observers.findIndex(item...