1.WebSocket
WebSockets通过浏览器和服务器之间的单连接提供全双工通信,不存在HTTP开销,允许服务器将消息实时推送到客户端
2.HTTP方式实现消息推送方式
轮询:客户端定时向服务端发送Ajax请求,服务器接收到请求后马上返回消息并关闭连接。缺点是TCP的建立和关闭浪费事件和带宽,请求中大半是无用的。适用于小型应用
长轮询:客户端向服务器发送Ajax请求,服务器接收到后hold住连接,直至有新消息才返回相应信息并关闭连接,客户端处理完相应信息后再向服务器发送新的请求。优点是无消息情况下不会频繁请求。缺点是服务器hodl连接消耗资源,返回数据顺序无法保证,难于管理和维护。实例WebQQ
长连接:在页面内嵌入一个隐藏iframe,将这个隐藏iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。优点是消息即时到达,不发无用请求。缺点是服务器维护一个长连接会增加开销。实例Gmail聊天
Flash Socket:在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。优点:实现真正的即时通信,而不是伪即时。缺点:客户端必须安装Flash插件,移动端支持不好,IOS系统中没有flash的存在;非HTTP协议,无法自动穿越防火墙。实例:网络互动游戏。
webSocket:HTML5 WebSocket设计出来的目的就是取代轮询和长连接,使客户端浏览器具备像C/S框架下桌面系统的即时通讯能力,实现了浏览器和服务器全双工通信,建立在TCP之上,虽然WebSocket和HTTP一样通过TCP来传输数据,但WebSocket可以主动的向对方发送或接收数据,就像Socket一样;并且WebSocket需要类似TCP的客户端和服务端通过握手连接,连接成功后才能互相通信。优点:双向通信、事件驱动、异步、使用ws或wss协议的客户端能够真正实现意义上的推送功能。缺点:少部分浏览器不支持。示例:社交聊天(微信、QQ)、弹幕、多玩家玩游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等高实时性的场景。
3.浏览器请求过程
构建请求->查找缓存->准备IP地址和端口->等待TCP队列->建立TCP连接->发起HTTP请求->服务器处理请求->服务器响应请求->断开TCP连接
- 现在默认会保持TCP连接一段时间,在这段时间内是可以发起多次HTTP请求