第一阶段:Form
web应用想要与服务器交互,必须提交一个表单(form)。服务器接收并处理该表单,然后返回一个全新的页面。
缺点:前后两个页面需要更新的数据可能很少,这个过程可能传输了很多之前那个页面已经有的数据,浪费了带宽;为了返回整个页面,服务器可能需要为页面的其他内容构造数据,浪费服务器资源。
第二阶段:Ajax(Asynchronous JavaScript and XML)
由JS脚本发送http请求,服务器只返回页面需要更新的那部分数据,JS根据返回的数据刷新页面的局部内容,而不是刷新整个页面。
优点:网络传输小、服务器负担小
缺点:没有解决对实时性的友好支持(比如聊天室或客服系统),如果需要持续地从服务器获取数据,需要不断请求
第三阶段:Comet
一种hack技术,基于http长连接的“服务器推”的技术。实现方式有很多种,比如基于Ajax的长轮询(long-polling)、封装好的Comet4J等。
比较简单的是基于Ajax的长轮询:web应用发出Ajax请求,服务器收到请求后,如果有数据就即刻返回,如果没数据,会等待一段时间(比如定时20秒),在等待的时间内,如果有数据就返回,如果一直没数据,则timeout的时候返回。web应用收到服务器的返回后,处理数据、更新页面,再继续请求。服务器在发送完数据到接收到一个新请求之前,如果有数据需要发送,则先缓存起来,等待接到下一次请求后再发送。
优点:基本解决了实时性的问题
缺点:服务器需要阻塞线程等待数据,如果连接请求多的话,得考虑使用复杂的技术释放线程给其他请求使用,不然可能会拖死服务器。需要客户端和服务器端协调好才能正常工作。
第四阶段:Websocket
html5标准中的一种全双工通信规范,基于TCP协议,与http协议兼容,但不是http协议的一部分。
web应用(客户端)先发起一个Handshake请求,服务器应答之后,就可以双向交换数据了。
通信的两方都可以发起关闭的请求(通过发送一个Closing Handshake),对方收到请求后,回复一个相同的数据包,就关闭通信通道了。
优点:数据传输量极少、实时性好。
PS. 此外,双向通信还可以通过flash的socket和xmlsocket实现。但它不属于某一个web规范。
版权声明:本文为原创文章,转载请注明转自Clement-Xu的csdn博客。 https://blog.csdn.net/ClementAD/article/details/50563569
来源:https://www.cnblogs.com/itcui/p/9128945.html