当前位置:   article > 正文

websocket简介_websocket介绍

websocket介绍

1 websocket基本概念

websocket是一种在单个TCP连接上进行全双工通信的协议。通过HTTP/1.1协议的101状态码进行握手。

目的是解决HTTP协议通信只能由客户端发起的缺陷。使用更优的方式实现推送技术,避免轮询需要的频繁的HTTP请求的开销。

2008年技术出现,对应RFC为 6455,2011年确定。https://www.rfc-editor.org/rfc/rfc6455
随后RFC 7936补充

2 websocket基本信息

  1. websocket概述
  • 在TCP之上,可以基于TLS层建立加密通道,类似HTTPS。

  • URI的形式像这样 ws://example.com:80/some/path,加密为 wss:///example.com:80/some/path,可以被浏览器识别,进而使用websocket协议进行交互。

  1. websocket握手
    使用HTTP UPGRADE机制进行握手,若服务器支持,会返回特定的结构,并约定一些后续websocket协议交互的细节。

3.websocket消息帧
在这里插入图片描述

  • 支持同一个消息分帧发送,用FIN位确定是否是最后一帧。
  • 有opcode标记帧类型:文本帧,二进制帧,关闭连接帧,ping帧。
  • payload标记长度,长度可变。

4.个人理解

websocket就是在TCP之上的一个基于帧的消息传输协议,但是可以通过HTTP/1.1协议进行握手,以兼容现有的中间代理等基础设施。

  • 比如nginx就可以通过配置,以特殊的方式处理websocket连接,以保持其连接。而不需要有像HTTP1.1中那样的keepalive请求。
  • 参考:https://blog.csdn.net/summer_fish/article/details/118960408

3 与HTTP的对比

  • 与原始HTTP对比

    • websocket与HTTP是相互独立的协议,在连接时使用HTTP/1.1协议握手。如下为两者交互流程上的差异
      在这里插入图片描述
  • 与HTTP2对比

    • HTTP2和websocket都能支持全双工,和server推送消息
    • 但是HTTP2是兼容HTTP1.1的语义的,websocket除了连接和关闭涉及到HTTP1.1,其他均与HTTP协议无关。

4 客户端支持情况

5 服务端支持情况

  • websocketpp

    • websocket的C++库实现。

    • https://github.com/zaphoyd/websocketpp(5.9K)

    • https://www.zaphoyd.com/projects/websocketpp/

    • 最近维护为2020年

  • gorilla/websocket

    • websocket协议的go实现库。
    • https://github.com/gorilla/websocket(18.3K)
    • 最近维护为2022年7月
  • joewalnes/websocketd

    • https://github.com/joewalnes/websocketd (16.4k)
    • http://websocketd.com/
    • 将命令行程序转为websocket协议
    • 通过websocket协议接收消息读入后转到标准输入,将对应进程标准输出的内容封装为websocket的帧内容返回。

5参考链接

https://zhuanlan.zhihu.com/p/407711596
https://www.ruanyifeng.com/blog/2017/05/websocket.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/241873
推荐阅读
相关标签
  

闽ICP备14008679号