对于一些技术的瞎说或想法

今晚在看Ajax ,看到了readystate ,关于其状态产生了一些看法,而这些看法与我在学习网络协议时

产生的想法不谋而合,那就是其实技术可以不要总是想的那么恐怖和困难。

XMLHttpRequest.readyState 返回的是XMLHttpRequest代理当前所属的状态,这些状态有:

看完这张图,我不经想起了曾经学过的TCP协议,当时我第一次碰到tcp的时候,那时我就在想为什么要三次握手,为什么握手

就是三次,想了很久不得其解,后来在知乎上看到一个大佬说过一个例子,让我茅塞顿开:

                                           小明:小红,请问你在吗?

                                            小红:我在呢,你能听到我说话吗?

                                            小明:我可以听到你说话。

没错,就是这个比较常用的打电话例子,这个例子对于三次握手的解释的确是非常通俗易懂了,那为什么不是两次呢?

其实很简单,那就是网络其实没有我们想的那么聪明,如果两次握手,我们想想会不会产生这一种情况:

客户端A给服务器B发个包,请求服务器连接,但是网络突然卡了延迟了,于是服务器B没有收到客户端A的请求,

A就很纳闷了,哎呀,好家伙还不鸟我?于是又重传了一个请求包给服务器B,这次网络OK,服务器B收到了请求,然后回送一个“OK,没问题”,

然后双方就开始愉快的传递数据。 传递数据结束后,双方断开,这时候,浏览器A第一次发出的请求包突然间可以继续传了,然后又一次

发送给服务器,而此时服务器是识别不了的(没办法,老好人。你问我就给),然后服务器B又一次和浏览器A建立连接,又一次重复传递数据,

这样就浪费了资源了。

而如果是三次的话,即使是服务器B收到延迟的请求包,然后回复“OK,没问题”给浏览器A,浏览器A也会只是“郁闷????,这什么玩意”(毕竟已经发过请求了,这次的数据交互已经结束了),

所以浏览器A也就不会对这个回复进行确认,那么服务器B收不到确认,也就不会进行连接了。

那么为什么不是四次握手呢?(这不废话吗?三次能搞定的事非得四次浪费时间和资源)。

这个TCP和Ajax有什么关系呢?    其实,我举这个例子只是觉得,一直以来我们对一门语言,技术的看法是不是太过复杂,或者说畏惧了?

编程语言也好,网络协议也罢,其实都是人们为了“方便”而创造出来的,而为了其可靠性,我们往里面添加了我们人类的逻辑进去,那么我们从这个

逻辑去想,是不是也就能够认可或者说理解到这门技术为什么会这样?这样的好处? 那么我们学习的时候把这些逻辑放到我们人类平时的认知生活中

是不是就能更理解一些,而不是痛苦的死记和害怕。

就像上面的readyState状态,第一次0  就是XmlHttpRequest 先提前对服务器打个招呼,说“服务器老哥商量个事啊,问你要些东西”,

然后“1” Opend方法: XMLHttpRequest打开自己随身携带的包袱,里面有过来方法“method” 想要的东西“URL” 要东西的方式“async”,

2 调用send 方法:拿到数据啦,往回送

3:开始接收数据,先检查看看这个数据的头“数据信息”  

4 数据没问题,全部接收完数据。

这么一想,感觉对Ajax 的状态认识也就有一种 “啊,原来如此”的感觉,感觉高大上的技术,似乎也就亲近了起来。

当然,我这样的类比其实在逻辑上还是很多漏洞的,但是也就是打个比方,给一个启示 :我们在学习的时候,是不是可以应该不止学习这门技术怎么用那么简单

而更多的问问为什么会这么做,去了解下这个技术里面透露的“逻辑性”,这么一来,对一门技术的了解,作者的思想可能会有不一样的认识。同样,

顺着这样的逻辑,自己也能去思考,这样我们是否就可以换一种方式,通过别的方式去实现这个功能? 这样的方法对于提升学习的乐趣和锻炼我们的逻辑

是不是有帮助?

以上,完。

补充:咳咳,本文纯属个人想法杂谈,如题,对技术我的认知还是比较浅显,如果有不一样的见解,还望一起留言交流。

        

猜你喜欢

转载自www.cnblogs.com/wxhhts/p/9333156.html