一、什么是长连接、长轮询?
长连接:基于HTTP的长连接,是一种通过长轮询方式实现”服务器推”的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。
一般都是用socket实现长连接
http请求一般是短连接:一次请求结束,就会断开与服务器的连接,服务器不能
主动推送数据到客户端,而只能由客户端发起请求。
a) AJAX短连接实现网页聊天
常规的短连接模式下,都是通过不间断的刷新请求实现的,比如每隔3s发送一次AJAX请求,3s更新一下数据,然后就这样不间断的刷新下去,直到用户关闭网页。
弊端:如果用户很长时间没有操作,每次刷新都不会返回新数据!
二.长连接方式
它的刷新是根据数据来执行的,如果有新数据返回就接收并解析显示数据。如果一段时间内用户没有操作则连接处于睡眠状态,一直等待用户输入或请求超时,然后发起下一个ajax请求。
这样做的好处是,每个消息都会即时推送到客户端,延迟极少;另外每次请求都是有意义的,与短连接对比,效率要高很多。但对于一个用户量很多,并且操作非常频繁的网站,长连接模式也会出现过于频繁的刷新问题。目前IE对于HTTP连接数是有限制的,每个网页只能同时进行两个长连接,第三个长连接会被阻塞。
轮询: 客户端定时向服务器发送AJAX请求。
缺点:请求中大半无用,浪费带宽和服务器资源
优点:后端程序编写比较容易。
实例:适于小型应用。
长轮询:客户端向服务器发送AJAX请求,服务器接到请求后hold住连接
直到有新的信息or新的数据才返回响应信息并关闭连接。客户端处理完再向服务器发送新的请求
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
实例:webqq Facebook IM等
长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。 (这里其实只是长连接的一种实现方式而已)
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点&