websocket概念梳理
一、实时web应用
- 保持客户端和服务器端的信息同步是实时 Web 应用的关键要素。
- 在
WebSocket
规范出来之前,开发人员想实现这些实时的 Web 应用,其中最常用的就是轮询 (Polling) 和 Comet 技术。Comet
技术实际上是轮询技术的改进,分为两种实现方式,一种是长轮询机制,一种称为流技术。- 轮询: 客户端以固定频率向服务器端发送请求,以频繁的请求方式保证两端数据一致。
缺点:频繁的请求,增加网络传输成本,低效。- 长轮询: 当服务器端数据没有改变时,保持连接状态直到数据更新或连接时间周期结束。
优点: 降低无效的网络传输。- 流: 在客户端中创建一个隐藏窗口,用于向服务器端发生一个长连接。服务器端接到请求后,作出响应,并不断更新数据保证两端的连接有效。缺点: 高并发的情况下,十分消耗服务器资源。
- 两种技术本质: 都是模拟实时web,利用ajax技术模拟实时效果,两端的每一次交互都是http的请求与响应的过程。往往开发者需要客户端与服务器之间进行双向通信,这就需要建立两条http连接。无疑,这种方式增加了开发的复杂度以及开发成本。
二、Websocket技术与node关系
HTML5 WebSocket
设计出来的目的就是要取代轮询和Comet
技术,本质上还是一种持久化的协议(基于tcp协议),相对于Http协议这种非持久化协议的补充。WebSocket
原理: 通过客户端向服务器端发送一条类似于http的请求(区别在于附加的请求头,Upgrade: WebSocket
),说明是发送的是一条WebSocket
请求。服务端解析这种请求并做出响应,两端就建立起websocket连接,双方就可以实时通信。- 实际开发中,为了解决相应的
WebSocket
请求,就必须有对应的websocket服务器进行处理,而javascript提供了一种解决方案,nodejs
。一种服务器端的js框架处理WebSocket
请求。
三、websocket局限性
websocket的兼容性问题,IE对其的支持性问题。