范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

系统设计基础知识(十一)WebSocket协议

  Websocket 使浏览器具有实时的双向通信能力。它可以打开用户浏览器和服务器之间的交互式通信会话。它提供了一种通过持久连接在客户端和服务器之间交换数据的方法。
  系统设计基础知识系列第十一章WebSocket协议。你可以阅读我以前的文章
  系统设计基础知识(一) - 网络
  系统设计基础知识(二)—数据库
  系统设计的基础知识(三)吞吐量和延迟
  系统设计基础知识(四)—系统可用性
  系统设计基础知识(五)—缓存
  系统设计基础知识(六)—缓存区
  系统设计基础知识(七)—代理
  系统设计基础知识(八)了解IP地址和端口
  系统设计基础知识(九)—负载均衡器
  系统设计基础知识(十)—DNS
  首先我们要明白,WebSocket本质上是一个计算机网络应用层的协议,用来弥补HTTP协议持久通信能力的不足。
  HTTP 协议是一种无状态协议。每个新的 HTTP 请求只能由客户端发起。每个 HTTP 请求都已完全结束。虽然HTTP1.1增加了keep-alive请求头,可以通过一个channel进行多次请求,但本质还是一样的。
  建立连接->传输数据->传输后断开
  WebSocket 是 TCP 传输协议,复用 HTTP 握手通道。可实现全双工和长连接通信。可以在单个 TCP 连接上进行全双工通信,可以更好地节省服务器资源和带宽,实现实时通信。客户端和服务器只需完成一次握手,两者之间就可以建立持久连接。
  WebSocket 是一种基于 TCP/IP 协议、独立于 HTTP 协议的通信协议。
  HTTP 协议本身并没有持久的通信能力,但是我们在实际应用中需要这种能力。WebSocket 解决了 HTTP 的这些问题。当服务端完成从 HTTP 到 WebSocket 的协议升级后,服务端可以主动向客户端推送信息。2011年被 互联网工程任务组(IETF)指定为标准 RFC6455 ,并更新为 RFC7936  . 于是,在HTML5标准中加入了WebSocket协议的相关API,只要实现了HTML5标准的客户端,就可以与支持WebSocket协议的服务器进行全双工持久通信。由于 WebSocket 只需要一次 HTTP 握手,服务器可以一直与客户端通信,直到连接关闭,解决了服务器重复解析 HTTP 协议的需要,减少了资源开销。
  WebSocket 的特点 2路通讯 有状态的 可以在浏览器中使用
  WebSocket协议原理
  WebSocket 协议需要建立 TCP 连接来传输数据。具体实现是通过HTTP协议建立通道,然后使用WebSocket协议进行通信,所以WebSocket协议和HTTP协议有一定的交叉关系。
  WebSocket 协议端口 = 80
  WebSocket SSL 协议端口 = 443
  Handshake WebSocket 也有一个握手过程,然后就可以正式发送和接收数据了。客户端发送的数据格式如下: 客户端请求消息
  客户端发起 WebSocket 协议请求。 GET /chat HTTP/1.1 Upgrade: websocket Connection: Upgrade Host: server.example.com Origin: http://example.com Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
  与传统 HTTP 消息的区别: Upgrade: websocket Connection: Upgrade
  这两行表示 WebSocket 协议已启动。 Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==  Sec-WebSocket-Version:13
  Sec-WebSocket-Key  它由浏览器随机生成,并针对恶意或无意的连接提供基本保护(Base64 编码值)。
  Sec-WebSocket-Version  表示 WebSocket 的版本。最初WebSocket协议太多,不同厂商有自己的协议版本,现在已经确定了。如果服务器不支持该版本,则需要返回一个 Sec-WebSocket-Versionheader  ,其中包含服务器支持的版本号。
  创建一个 WebSocket 对象: var ws = new websocket("ws://127.0.0.1:8001");
  ws  表示使用WebSocket协议,后面是地址和端口
  2. 服务器响应消息 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat 101  状态码表示服务器已经理解了客户端的请求,会通过 Upgrade  消息头通知客户端使用不同的协议来完成请求 101 Switching Protocols  显示HTTP请求完成后响应的状态码,表示协议已经切换,表示WebSocket协议通过HTTP协议建立传输层的TCP连接,然后与HTTP协议无关. Sec-WebSocket-Accept  由服务器确认并加密 Sec-WebSocket-Key  Sec-WebSocket-Protocol  代表最终使用的协议 Sec-WebSocket-Accept
  计算方法:将 Sec-WebSocket-Key  请求头中的值添加到专用UUID。摘要由 SHA1 计算并转换为 base64 字符串。 Sec-WebSocket-Key  /的转换 Sec-WebSocket-Accept  只能带来基本的保证,但是连接是否安全,数据是否安全,客户端/服务器是否合法, ws  客户端, ws  服务器,都没有实际的保证。
  WebSocket 数据帧
  WebSocket 以帧为单位传输数据。帧是客户端和服务器之间数据传输的最小单位。 当数据过大时,可以将消息拆分成多帧发送。 解码是恢复完整的消息
  帧头中的操作码字段 FIN ,长度为 1 位,该标志用于指示当前帧是消息的最后一段。FIN字段全部为0,最后一帧的FIN字段为1。如果消息没有被分段,那么一帧包含完整的消息,它的FIN字段值为1。 RSV 1~3  — 这 3 个字段是保留字段,仅在 WebSocket 扩展中使用。如果接收方接收到 RSV 1~3 不全为 0 的帧,则这 3 个字段应设置为 1。 2 方尚未协商使用 WebSocket 协议扩展,接收方应立即终止 WebSocket 连接 Opcode ,长度为4位,该字段将指示帧的类型 0x0  — 延续帧 0x1  — 文本框 0x2  — 二进制帧 0x3~7 ,目前保留,以后会作为更多的非控制帧使用 0x8—— 连接关闭 0x9  — 当前 ping 帧 0xA  — 当前的乒乓帧 0xB ~F—— 目前保留,未来将用作更多控制帧 Mask ,长度为1位,该字段为标志位,用于指示该帧的数据(有效载荷)是否被屏蔽。 Payload Len  — 帧有效载荷的长度(以字节为单位),该字段的长度是可变的,可能是 7 位,可能是 7+16 位,也可能是 7+64 位。 Masking-key  — 当 Mask 标志为 1 时,表示这是一个被掩码覆盖的帧。此时存在Masking-key字段,长度为32位。发送到服务器的帧必须用掩码覆盖。该字段的值由客户端使用具有足够大熵值的随机数生成器生成。 Payload—— 这个字段的长度是任意的,这个字段是帧的数据部分。
  WebSocket 控制类框架
  主要用于传递一些连接控制信息 关闭框架 ——用于关闭 WebSocket 连接 Ping Frame—— 检测帧,主要用于实现WebSocket层的Keep-Alive,或者检测对方是否还处于活跃状态 Pong Frame  — 是 Ping Frame 的响应,一方面,接收方在收到 Ping 帧后应立即发回 Pong Frame,并且 Payload 的内容必须与 Ping 帧相同。 状态码
  连接成功状态码
  101 - HTTP 协议切换到 WebSocket 协议
  连接关闭状态码
  1000:正常断开
  1001:服务器断开连接
  1002:WebSocket 协议错误
  103:客户端接受不支持的数据格式
  1006:异常关机
  1007:客户端接受了无效的数据格式(短信编码不是utf-8)
  1009:传输数据量太大
  1010:客户端终止连接
  1011:服务器终止连接
  1012:服务器正在重新启动
  1013:服务器暂时终止
  1014:通过网关或代理向服务器请求,服务器无法及时响应
  1015:TLS 握手失败
  WebSocket断线的原因 网络状态不好 数据被各种类型(路由器、防火墙、代理服务器)阻止 网络服务器故障
  WebSocket断开连接的解决方案 Heartbeat Reconnection  — 它是通过 ping/pong(常规帧/控制帧)的服务器端实现来实现的。服务器向客户端发送ping 0x9 消息,客户端自动返回pong 0xA 消息。客户端定期向服务器发送消息。这里的消息是指WebSocket协议的数据帧,不需要通过代码实现。不同客户端发送消息的时间间隔不同。
  优势 更少的控制开销 ——数据包头协议更小,不像 HTTP 为每个请求携带一个完整的头 更强的实时性 ——相比HTTP请求需要等待客户端发起请求,服务端可以响应,延迟明显更小 保持连接状态 ——通信创建后,可以省略状态信息。 更好的二进制支持 ——定义了二进制帧,更好地处理二进制内容 支持扩展 ——用户可以扩展WebSocket协议,实现一些自定义的子协议 更好的压缩 ——WebSocket可以继续使用之前内容的上下文,可以显着提高压缩比
  如果你发现我的任何文章有帮助或有用,麻烦点赞或者转发。 谢谢!

姜文,牛逼1hr颁奖礼上。姜文一把夺走礼仪小姐手上的奖杯,走上领奖台。杨澜都惊了。要知道,这奖不是颁给他的。是颁给葛优的。哪怕代领,你也得按照流程,先请颁奖嘉宾,再颁奖,再发言。谁能想到,姜莱绅通灵掉钻调解时画风突变陈女士有两枚莱绅通灵的戒指。她反映,两枚戒指都发生了小碎钻脱落的问题。1818黄金眼两枚莱绅通灵戒指碎钻脱落是否正常?先来说说陈女士最近买的这枚戒指,王室马车系列的金750戒指。是强降雪来袭!这些冷知识刷新你对雪的认识!2023年首场寒潮来袭全国大范围雨雪陆续上线12日至13日雨雪天气将覆盖中东部大部地区多地有大到暴雪暴雪来袭关于雪你知道多少?这些冷知识刷新你对雪的理解雪究竟有多重?看似小小的雪花新年将至,忠告大家即使囊中羞涩,也别碰这2类酒,费钱又伤身有钱没钱,都要回家过年。新年对于国人来说,是大事,意味着团圆,意味着阖家欢。2023年仅剩10天,不知道大家的年货都预备的咋样了?说到年货,除了大鱼大肉,水果干菜,家家户户少不了的富乐德1月11日龙虎榜数据富乐德今日上涨1。09,全天换手率45。53,成交额6。21亿元,振幅9。75。龙虎榜数据显示,机构净卖出355。78万元,营业部席位合计净买入870。16万元。深交所公开信息显示关注成立70周年,他们这样庆祝文图刘恩郑格章明杰张伟博徐树吉近日,东部战区航空兵某部隆重举行旗帜引领扬风帆勇立潮头谱新篇庆祝单位成立70周年文艺晚会暨典型人物颁奖典礼演出分为闪光足迹映长空时代召唤勇前行薪火相传两国军事勾连频繁之际,美国计划在日本大幅增加部署反舰导弹数量文观察者网熊超然当地时间1月10日,路透社援引三名美国官员的消息报道称,美国将大幅增加部署在日本的反舰导弹数量,此举是意图遏制中国的更广泛努力的一部分。尽管驻日美军的总人数不会改变胡海泉持股公司退出本宫的茶近日,广州本宫餐饮服务有限公司发生工商变更,由胡海泉持股44的广州江泉投资有限公司以及李媛孙健退出股东行列,新增睢宏江为股东。该公司是奶茶品牌本宫的茶的运营公司。据本宫的茶品牌官网第025集正能量语录2023一战到底,未来可期每日一文收获满满正能量(1)追梦之路道阻且长击退恐惧最好的办法是行动起来将目标分解成任务一步一个脚印去完成终能抵达成功的彼方(2)生活是一场冒险的旅程想要俯瞰山河就向上攀登想要乘风漫评CBA京辽之战国家队锋线找到答案中国青年报客户端北京1月11日电(中青报中青网记者杨屾)1月10日晚上的京辽大战备受关注,辽宁男篮技高一筹最终获胜。但比结果本身意义更大的是,中国男篮未来锋线的人选,似乎找到了答案二三四五龙虎榜数据(1月11日)二三四五今日涨停,全天换手率11。37,成交额17。27亿元,振幅7。78。龙虎榜数据显示,机构净卖出3。05万元,深股通净卖出1507。47万元,营业部席位合计净买入7780。0
天时地利人和成就北京双奥之城的梦想纪念北京2022年冬奥会成功举办一周年系列活动以非凡冬奥路一起向未来为主题,于今年2月至3月在北京冬奥会京张两地三赛区组织进行。回想起一年前,中国人民展现出的对奥运会一如既往的热忱畅游华夏风景名胜之北京篇(四)圆明园在地球上的一个角落里,有一个神奇的世界,这个世界就叫做圆明园几乎是神奇的人民的想象所能创造出来的一切,都在圆明园身上得到体现您尽可以凭人类所具有的无限丰富和无可比拟的想象力,把它想经验分享程序员成功转行IC,我终于不用再吃青春饭近期后台收到了一位同学的私信,转行IC后他的薪资涨了很多,这位同学之前是程序员,经过不断努力成功转行到IC后端。我是西安一所普通的一本毕业,学的是自动化专业,大学跟大多数人一样过得11万买辆特斯拉?特斯拉新车成本将降低一半,新消息3月1日公布2022年一波降价,将特斯拉Model3ModelY在国内市场的新车降价拉到了历史最低水平,尤其是Model3,新车起售价已经低至22。99万元,除了这个价格本身已经非常低了之外,75天宝宝能睡整觉了今天感觉宝宝进步很多,能一觉睡四个小时了,凌晨四点才起床喝奶,然后继续睡到早上七点半才醒,比起头段时间,我觉得幸福感很强了。想起宝宝二月闹的时候,一家人都崩溃了,那段时间宝宝的爸爸如何培养孩子强大的内心,从胡鑫宇事件得到的启发你不要脸对,我就是不要给你吧!你刚好没有你滚我没有你圆你来先示范一下,我不知道怎么滚!你好丑我是不好看,但是在你面前我还不够丑的资格你长得好矮呀!你说得对,狗眼看人低说完这些孩子转春节喜迎兔宝宝,元宵团圆添丁喜宝宝的第一声啼哭,宣告了新生命的诞生,也为家庭带来喜悦为社会带来希望。在新年里,新生的喜讯更令人激动和振奋。正月初三,在武汉市一医院出生的兔宝宝宋承希,是家里的第三个孩子。我们做生孩子感觉受到不公平对待怎么开解?大无语事件。元宵节爷俩回老家放烟花,忽然发现叔叔家孩子有个新玩具,堂弟很骄傲的说是姨姥姥(奶奶的妹妹)买的,说每年都买。而且不让孩子玩。孩子回来问,姨姥姥为啥不给他买,是不喜欢他么生宝宝,可以参考生在这些星座中一个人的能力,和遗传教育经历等都有关系,和星座也有关联,星座特质概率无法统计高低,但多年hr分享给小伙伴的是,星座特质有实际意义。就如现实中人们说,你看看他父母那么优秀,怎么生了个法律解读胎儿的民事权利研究头条创作挑战赛什么样的人享有民事权利呢?在民法典中并没有具体规定什么样的人享有民事权利,但是根据法律的其他规定,我们可以推定活着的人享有民事权利。即使一些小婴儿没有民事行为能力,但莫兰德回归后辽宁队能确保卫冕成功吗,浙江球迷先过半决赛吧最近,各大平台球迷和自媒体媒体都在议论两件事,一件事是中国男篮主教练乔尔杰维奇不满国家队队员基础太差,罚篮都罚不进。第二件事是CBA辽宁大外援莫兰德与总冠军,辽宁球迷说莫兰德是广东