websocket是一种网络通讯协议,浏览器只需要与服务器握手一次就能保持通信。是伴随着H5发布的一种新兴的协议。它是基于TCP的一种的协议,他与服务器的握手是Http的复写。那么为什么有了http协议,为什么还要有websocket呢?


    这是因为http协议是一种无状态的协议,且与服务器的通信只要由客户端发送,极大的影响了通信的效率。

而websocket就不一样了,它是一种全双工通信协议。即不仅仅客户端可以与服务器发送消息,服务器也可以给客户端发送消息(参考订阅/发布模式),进行通信。例如天气的推送,聊天室等。

并且websocket可以实现持续的进行长连接。而http通信完后即断开连接。

在websocket发布之前,http需要每隔一小段时间就像服务器发送请求,看 服务器的数据是又有更新,是否有消息要发送给客户端,就不断的轮询服务器(不断的发送请求),而一个http请求需要由发送时间,服务器的处理时间,响应时间。这期间会造成大量资源的消耗,由不得不这样做。而websocket就不需要这样。它的连接只需要一次,就可以保持持久的实时通信。

http与websocket对比

http(超文本传输协议)

websocket

无状态协议  需要多次连接,需要轮询服务器,以确保信息的随时更新 

持续状态协议,只需要一次连接就可以实时保持通讯

请求只能由客户端发出,

b不仅仅客户端向服务器发起请求,服务器也可向客户端发出信息,实现双向通信。是全双工通信

较多的额外费用(overhead),每次发送消息都会有一个HTTP header信息,而且如果不用Keep-Alive每次还都要握手

不需要这么携带这么多的信息。只需要携带要发送的信息

websocket客户端的握手是一个基于http协议的握手,

j既可以发送文本,也可以发送二进制的数据。

websocket建立在TCP协议之上。服务器端实现起来比较容易。

无需考虑同源策略的限制,可以与任意服务器进行通信。

目前越来越多的浏览器实现了websocket,它已经称为了一种趋势。

来自[阮一峰老师](http://www.ruanyifeng.com/blog/2017/05/websocket.html)

grpc Java 双向通信 双向通信协议_客户端

目前它的实现有MDN API,可以去网站上看API。

    

参考阮一峰老师博客等。