WebSocket有什么用处,和Socket的区别 | 青训营笔记

139 阅读2分钟

WebSocket有什么用处,和Socket的区别 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的第7天

WebSocket和Socket除了名字相似之外,实际上没有半毛钱关系,前者位于OSI七层中的应用层,后者是应用层与传输层的一组接口,本身并非协议,把复杂的TCP/IP协议簇隐藏在Socket接口后面,通过Socket去组织数据,符合指定的协议

WebSocket

基于HTTP的通信只能由客户端发起,在某些场景,如想了解当天天气,只能由客户端发起请求,服务器返回查询结果,HTTP协议无法做到主动向客户端推送信息。这种单向请求的特点,若服务器有连续的状态变化,客户端要获知只能使用”轮询“的方式,非常浪费资源。使用WebSocket即能解决该问题。

WebSocket实现了客户端和服务器真正的平等对话,服务器也可以主动向客户端推送消息。

特点:

  • 全双工:通信允许在两个方向上同时传输,瞬时同步

  • 握手:建立在TCP协议上,才能正式收发数据

    客户端发送数据格式:

    Get /chat HTTP/1.1
    Host: server.xxx.com
    Upgrade: websocket     // 必须设置websocket,表示希望升级到websocket协议
    Connection: Upgrade    // 必须设置Upgrade,表示客户端希望连接升级
    Sec-WebSocket-Key: 字符串密钥 // 1. 客户端发送的base64密文,用于简单的认证密钥。
    // 2.要求服务端必须返回对应加密的"Sec-WebSocket-Accept"应答,否则会抛出错误关闭连接
    Origin: <http://example.com>
    Sec-WebSocket-Protocol: chat, superchat
    Sec-Websocket-Version: 13   // 支持的websocket版本
    

    服务端返回的数据格式:

    HTTP/1.1 101 Switching Protocols  // 表示接受WebSocket协议的客户端连接
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: 字符串密文 // 验证客户端请求报文,也防止误连接
    
  • 兼容性:与HTTP协议具有良好的兼容性。默认端口是80和443,且握手阶段采用HTTP协议,因此能通过各种HTTP代理的服务器验证

  • 效果:数据格式轻量化,性能开销小,通信高效,不需要每次请求携带身份验证

  • 二进制帧:支持文本和二进制格式数据,不需要HTTP2那样多路复用,优先级,服务器推送等特性

  • 没有同源限制: 客户端可以与任意服务器通信

  • 协议名:协议标识符是ws(加密为wss),服务器网址就是URL

应用场景:

  • 弹幕
  • 媒体聊天
  • 协同编辑
  • 基于位置的应用
  • 体育实况更新
  • 股票基金报价实时更新