一简介
WebSocket是一种在单个TCP连接上进行全双工通讯协议。目的是在浏览器和服务器之间建立一个不受限的双向通信通道。本质是先通过HTTP/HTTPS协议进行握手后创建一个用于数据交换的TCP连接,此后服务端和客户端通过此TCP连接进行实时通信。WebSocket诞生于2008年,2011年成为国际标准。
ws是WebSocket的普通通信协议,默认端口是80。wss是安全的,默认端口443
二诞生背景
首先WebSocket是一种网络通信协议。
HTTP协议有一个缺点:通信只能由客户端发起。比如要获取今天的天气,客户端向服务器发起请求,服务器给客户端返回结果。这种请求叫做单向请求。也就是说客户端不主动请求,服务器是不会返回结果的。
为了解决服务器主动给客户端返回结果的问题,用到了轮询或Coment技术。轮询技术:浏览器通过JavaScript启动一个定时器,固定的间隔去请求服务器,由服务器返回给最新的数据。缺点实时性不够,频繁的请求会给服务器带来压力。
Comet本质上也是轮询,但是在没有消息的情况下,服务器先拖一段时间,等到有消息了再回复。这个机制暂时地解决了实时性问题,但是它带来了新的问题:以多线程模式运行的服务器会让大部分线程大部分时间都处于挂起状态,极大地浪费服务器资源。另外,一个HTTP连接在长时间没有数据传输的情况下,链路上的任何一个网关都可能关闭这个连接,而网关是我们不可控的,这就要求Comet连接必须定期发一些ping数据表示连接“正常工作”。
所以WebSocket应用而生。
三WebSocket的优点
- 建立在TCP协议上,服务器实现比较容易
- 有良好的兼容性,握手阶段采用HTTP协议,不易被屏蔽。
- 数据格式比较轻量,性能开销小,通信高效
- 可以发送文本,也可以发送二进制
- 客户端可以与任意服务器通信