短连接
客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
长连接
客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
短轮询
浏览器定时向服务器发送请求,看有没有更新的数据,来保持客户端和服务端的同步。
长轮询
长轮询其实 也是客户端请求服务端,但是服务端并不是即时返回,而是当有内容更新的时候才返回内容给客户端,从流程上讲,可以理解为服务器向客户端推送内容;
页面发起一个到服务器的请求,然后服务器一直保持连接打开,直到有数据可以发送。
发送完数据之后,浏览器关闭连接,随即又发送一个到服务器的新请求。这一过程在页面打开期间一直持续不断。(在服务端hold住Http请求(死循环或者sleep等等方式),等到目标时间发生,返回Http响应。
打个比方,短轮询像餐厅的顾客,每隔一会问下饭好了没,长轮询像服务员,一直等在窗口,饭好了才离开,给客户送到后回来继续等下次上菜。
在web开发时经常会遇到实时请求数据的需求,比如聊天功能、投票功能、抢购功能等,实现这些功能常用的技术分别是轮询,长轮询和基于WebSocket协议来实现。
HTTP 协议有一个缺陷:通信只能由客户端发起。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。虽然轮询可以解决,但频繁的询问会耗费较多资源。
WebSocket
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
参考文献: