美文网首页
Web学习笔记2--Ajax vs Websocket

Web学习笔记2--Ajax vs Websocket

作者: mmmmichelleeeee | 来源:发表于2018-01-26 17:20 被阅读0次

    Ajax(Asynchronous Javascript and XML)

    早期的浏览器在向web服务请求时,每请求一次,需要更新加载reload整个页面,这是非常耗时的事情。为了解决这个问题,Ajax诞生了,通过Ajax可以实现浏览器请求web资源,仅仅只需要更新需要更新的部分而不用重新加载整个页面,这大大节约了资源和时间。

    XHR(XML HTTP Request)

    通过Ajax发送的请求,都是XHR请求,他是浏览器层面的API技术,可以通过他实现数据传输。XHR早期版本的能力有限,只能传输文本,处理上传能力有限,并且不能处理跨域请求。XHR经过了两次更新,现在处于level2阶段,目前已经支持:请求超时;传输二进制和文本数据;应用重写媒体类型和编码响应;监控请求的进度和事件;有效文件上传;安全的跨来源请求等。所有的现代浏览器都支持XHR level2的功能。

    Websocket

    计算机交流协议,提供双通道通讯,即可以在一个tcp连接上同时进行request、response操作。Websocket被我们称之为长连接,相比于Ajax的XHR技术,我们称之为短连接。在使用Websocket的时候,tcp连接一旦建立,就不会中断(除非我们主动断开连接),我们在该tcp连接上进行websocket通信,向服务器请求消息。Ajax短连接意思就是,每一个XHR请求,都会建立一次tcp连接,直到一次请求响应结束或超时,tcp连接就会断开。所以,XHR请求中,每请求一次都需要建立一次tcp连接,相当耗费资源。但对于传统的web应用,用户操作一个按钮进行一次请求数据更新的操作很常见,并且频率也不会很高,所以基本上不太影响性能。websocket不单单只是连接服务器与客户端,还可以连接客户端与客户端或者客户端与其他资源等,例如:聊天室的时时输入同步功能,如甲,乙,丙三个用户在一个聊天室进行聊天,甲输入时,可以在乙和丙的客户端同步到甲正在输入的提示信息,其他信息以此类推。这些功能都由websocket技术实现,传统的XHR技术不支持。

    服务器推送

    服务器主动向客户端推送消息,而不需要客户端主动请求。Ajax和websokcet都可以实现该功能,只是策略有所不同。Ajax实现服务器推送使用轮询polling,即定期定时向服务器发送更新请求,可能是每秒发送也可能是几分钟发送一次,这个需要根据更新消息的频率和需求而定。但是如果是频率较高的请求,从某种成都来说也是比较耗费资源的。于是还有另外一种轮询机制,即所谓的长轮询long polling,发送一个request请求建立连接,直到服务器有更新才返回响应。在长轮询过程中可能会遇到请求超时,连接断开的情况,这时我们需要设置一个断开重连机制即可。大致总结一下Ajax实现服务器推送有两种方法:

    1. 短轮询:定时定期向服务器发送更新请求

    2. 长轮询(comet):发送一个更新请求,直到服务器有更新数据为止返回请求,连接断开。在此过程中,如果服务器长时间无更新造成请求断开连接,可以再次发送请求建立连接

    websocket推送技术在H5才得以运用,只建立一次连接,就可以保持服务端与客户端之间的通讯,客户端不需要向服务器做额外的请求,服务器随时可以给建立连接的客户端发送推送请求。

    Ajax vs. Websocket

    1. Ajax短连接,Websocket长连接

    2. Ajax单向传输,一发一收。Websocket双向传输,同时在一个tcp连接上进行request、response操作

    3. Ajax不支持stream流数据传输,在传输大文件时,blob类型大文件对象可以进行分块发送,一个块最大可以分64M。Websocket支持stream流数据传输,可以传输blob对象大文件,也可以之间传输stream流

    4. Ajax轻量级,Websocket因为长连接的特性,比较消耗资源(比如:移动端造成耗电等)

    相关文章

      网友评论

          本文标题:Web学习笔记2--Ajax vs Websocket

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