【介绍】
websocket是一种在单个 TCP 连接上进行全双工通讯的协议,主要是为了弥补http协议上的不足之处
【为什么选择WebSocket】
可以实现服务端主动给客户端推送消息。一般应用都是客户端主动向服务端获取消息,而不是服务端实时推送消息,
这样既不能获取最新消息,又占用资源
Websocket可以主动向客户端推送消息。
使用客户端的websocket去连接服务器,一旦连接建立起来,服务器就可以向客户端推送消息,客户端也可以向服务端要数据
很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,
然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,
然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源
浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。
当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。
【与socket的区别】
Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。
当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。
总结:
Socket是传输控制层协议,WebSocket是应用层协议
【与http区别】
相同:
都是一样基于TCP的,都是可靠性传输协议。
都是应用层协议
不同:
WebSocket是双向通信协议,而Http是单向的
WebSocket是需要握手进行建立连接的
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的