1 什么是webSocket
webSocket实现了浏览器与服务器的全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,它本质上是一个基于TCP的协议
2 websocket和http区别
(1)相同点
- 都是基于TCP协议,都是可靠性传输协议
- 都是应用层协议
(2)不同点
- http是单向的,websocket可以双向发送和接受信息
- websocket需要浏览器和服务器握手建立连接,http是浏览器发起向服务器的连接,服务器预先不知道这个连接
(3)联系
websocket在建立握手时,数据是通过http传输的,但是建立之后,在真正传输时候是不需要http协议的
3 websocket解决的问题
(1)http存在的问题
- http是无状态协议,每一次通信完成,服务端都不知道下一次的客户端是谁。需要每次知道对方是谁才进行相应的响应,因此不利于实时通讯
- http采用一次请求一次响应,每次请求和响应都要携带大量请求头,可能导致效率低下
- 不能服务端主动发送
(2)长轮询
基于上述问题,解决办法是客户端发起长轮询,如果服务端的数据没有发生变更,会保持连接,知道客户端数据发送变化或等待一定时间超时才会返回
存在问题: 推送延迟,服务端数据变更,才会结束长轮询,才会返回响应给客户端
(3)websocket的改进
一旦websocket连接建立以后,后续数据都以帧序列的形式传输。客户端断开websocket连接或服务端中断连接前,需要客户端和服务端重新发起请求。
websocket的特点:
- 建立websocket后,客户端和服务端是完全平等的,可以互相主动请求;而http的长连接是基于http,是传统的客户端对服务端发起的请求
- http长连接中,每次数据交换除了真正的数据以外,还有携带的请求头信息。websocket协议通过第一个请求建立了TCP连接以后,之后交换数据都不需要发送http header就能交换数据