websocket协议详解

websocket详解

websocket概念

  • 当服务器完成协议升级后,由http转换为websocket,服务端就可以主动推送消息给客户端啦,解决了Http同步有延迟的问题
  • 解决服务端资源消耗问题,其实我们的所有应用程序都要经过两层代理,即http协议在Nginx等服务器的解析下,传递给应用服务区handler
    简单来说我们有一个非常快速的接线员nginx,它负责把问题转交给相应的客服handler,websocket就解决了这样一个难题,
    建立后,可以直接跟接线员nginx建立持久链接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户
  • 由于websocket只需要一次Http握手,所以说整个通讯是建立在一次链接/状态中,也就避免了http的非状态性
    服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员反复解析http协议,还要查看identity info信息
  1. websocket协议是html5出的协议,支持持久链接,而http不支持持久链接(keep-alive或自行实现不算)

  2. websocket是一种网络传输协议,位于OSI七层的应用层,可以在单个tcp连接上进行全双工通信
    能更好的节省服务器资源和宽带并达到实时通讯

  3. 客户端和服务器只需要完成一次握手,两者之间就可以创建持久的链接,并进行双向数据传输
    如图:

  4. 由图可以看出,websocket服务器与客户端通过握手建立链接,链接成功后
    两者都可以主动的向对方发送或接收数据

  5. websocket出现之前,开发实时的web应用方式为轮询,
    客户端不停的向服务器发送http请求,问有没有数据,有数据的话服务器就响应报文回应,
    如果轮询的频率较高,就可以实现近似的"实时通信"的效果
    轮询的缺点也很明显,反复发送无效的查询请求耗费了大量的带宽和CPU资源

http协议是什么模式的

  1. http1.0: 单工,短链接,客户端发起请求,服务端响应请求,断开链接
  2. http1.1: 半双工,默认开启keep-alive长链接,客户端发送请求不用等待服务端响应,
    然后用该链接发送其它http请求,服务端需要按照顺序一个一个的响应
  3. http2.0: 全双工,允许服务端主动向客户端发送数据

websocket的特点

  1. 推送功能
    支持服务端向客户端推送功能,服务端可以直接发送数据而不用等客户端的请求
  2. 减少通信量
    只要建立起websocket链接,就一直保持链接,再次期间可以源源不断的传送消息,直到请求关闭
    也就避免了http的非状态性(保持创建链接的状态),和http相比,不但每次链接时的开销减小了,
    而且websocket的首部信息量也很小,通信量也减少了
  • 客户端发送数据格式
    Connection: 必须设置Upgrade, 表示客户端希望链接升级
    Upgrade: 必须设置Websocket, 表示希望升级到websocket协议
    Sec-WebSocket-Key:客户端发送一个base64编码的密文,用于简单的认证秘钥
    要求服务端必须返回一个对应加密的Sec-WebSocket-Accept,否则客户端会抛出错误,并关闭链接
    Sec-WebSocket-Version: 表示支持的websocket版本
  • 服务端返回的数据格式
    Sec-WebSocket-Accept:验证客户端请求报文,同时也是为了防止误链接,
    具体的法是把Sec-WebSocket-Key的值再加上一个UUID,在家计算摘要

websocket优点

  1. 较少的控制开销,数据包头部协议较小,不像Http协议每次都需要带完整的头部
  2. 更强的实时性,相比如http请求需要客户端发起请求服务端才能响应,延迟明显更少
  3. 保持创链接状态,创建通信后,可省略状态信息,不同于http每次请求都需要携带身份验证
  4. 更好的二进制支持,定义了二进制帧,更好的处理二进制内容
  5. 支持扩展,用户可以扩展websocket协议,实现部分自定义的子协议
  6. 更好的压缩效果,websocket在适当的扩展支持下,可以沿用之前内容的上下文,
    在传递类似的数据时,可以显著的提高压缩率

应用场景

  1. 基于websocket实时通信的特点,它有广泛的应用场景
  • 弹幕
  • 媒体聊天
  • 协同编辑
  • 基于位置的应用
  • 体育实况更新
  • 股票基金报价实时更新
posted @ 2022-04-27 17:33  专职  阅读(314)  评论(0编辑  收藏  举报