上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
WebSocket是什么
在解释WebSocket之前,先来看个需求。
在股票交易时间内,股票的价格变化十分迅速,股票网站需要向正在浏览页面的用户实时更新股价,这个需求里的更新逻辑应该怎么实现呢?
传统的HTTP协议是无状态的,每次发出请求时建立连接,收到回复时便断开连接。如果使用 HTTP 协议来完成这个需求,则有两种实现方式可以选择:一种是使用轮询的方式,每隔几秒就重新向服务器发送一个请求,查询是否能获取最新的数据。这样做付出的代价是,每次都要重新建立一次连接,建立连接就需要重新进行三次握手,发送Header等冗余信息,很浪费资源。
还有一种通过HTTP实现实时更新的技术,就是Comet,它的原理是发送一个更新请求后,就一直占据端口,等待服务器响应,直到服务器有数据返回时才会断开连接。一个请求一直不断开,也很浪费客户端和服务器的资源。
使用WebSocket可以很好地解决这个问题。WebSocket是 HTML 5的一个主要特性,它是建立在TCP上的一种全双工协议,也就是说客户端可以向服务器发信息,服务器也可以向客户端推送消息。WebSocket 在首次建立连接时,使用普通 HTTP和服务器通信,同时告诉服务器后面的交互用WebSocket的方式。在WebSocket连接建立后,往来的消息都可以通过这条管道发送,同时客户端与服务器也会不断地用ping-pong的方式保持心跳,防止连接异常断开。
将更新逻辑从HTTP迁移到WebSocket是很简单的,只需要实现WebSocket的几个接口,就能在支持的浏览器上使用WebSocket的双工特性。如果读者想做一个实时性很强的网页,或者想向网页及时推送一些信息,尽量选择WebSocket。