WebSocket协议基础

简介: WebSocket协议基础

什么是websocket


WebSOcket 是基于TCP的应用层协议。该协议和http或https 相似,但是却区别于http的一种新的协议。Websocekt 支持客户端之间双向通信。

websocet 特点

  1. websocket 支持双向通信,支持服务端主动向客户端推送数据。
  2. websocket只是满足了tcp 的分包和粘包处理,负载没有做数据处理

一、websocket 建立连接流程


  1. TCP三次握手,建立连接;
  2. websocket 进行握手(握手一次)建立连接;客户端向服务端发送包
  3. 数据通信。


二、websocket 握手流程


websocket 分成两个部分,握手和传输数据。


客户端握手包

代码如下:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== 值是一个base64 编码

2.服务端握手包

代码如下:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat


"Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= "这个应答base64编码的数据如何获取?


1.客户端 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

2. websocket GUID : 258EAFA5-E914-47DA-95CA-C5AB0DC85B11

3. 连接:key_sting = dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11

4. SHA-1 hash : 对key_string 做hash: key = hash(kkey_sting);

5. 对hash 值做base64 编码:encode_base64(key);


三、websocket数据


数据部分:数据传输结构

协议结构大体分为4部分: 装填部分+可选,Mask部分、负载长度,负载;


FIN: 表示最后一个数据包;

MASK位,如果MASK位置位,则头部中的Masking-key 长度是4字节;否则Masking-key 长度编程0;

Payload len :负载基本长度度: 1<<7;如果负载长度126 则扩展负载长度占用2字节: 长度127 则占用8字节;


负载长度: 7bit+16 bit或7bit+64bit


详解:


总结


本文简单的记录了一下,websocket 如何建立连接和数据传输的格式。websocket 的特性等


参考


本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看详细的服务

目录
打赏
0
0
0
0
0
分享
相关文章
语音交互产品通过WebSocket协议对外提供实时语音流语音转写功能
阿里云智能语音交互产品通过WebSocket协议提供实时语音转写功能,支持长语音。音频流以Binary Frame上传,指令和事件为Text Frame。支持单声道、16 bit采样位数的PCM、WAV等格式,采样率8000Hz/16000Hz。可设置返回中间结果、添加标点、中文数字转阿拉伯数字,并支持多语言识别。服务端通过临时Token鉴权,提供外网和上海ECS内网访问URL。交互流程包括StartTranscription、StopTranscription指令及多种事件反馈。
websocket协议介绍与基于reactor模型的websocket服务器实现
websocket协议介绍与基于reactor模型的websocket服务器实现
155 0
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
339 7
Jmeter实现WebSocket协议的接口测试方法
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
308 0
为什么ChatGPT采用SSE协议而不是WebSocket?
在探讨大型语言模型ChatGPT的技术实现时,一个引人注目的细节是其选择使用SSE(Server-Sent Events)协议而非WebSocket来实现数据的实时推送。这一选择背后,蕴含着对技术特性、应用场景及资源效率的深思熟虑。本文将深入探讨ChatGPT为何偏爱SSE,以及这一决策背后的技术逻辑。
555 3
Java一分钟之-WebSocket:实时通信协议
【6月更文挑战第1天】WebSocket是实现客户端与服务器长连接、双向通信的协议,简化实时数据传输。Java中的WebSocket实现基于JSR 356。本文涵盖WebSocket基础(持久连接、双向通信、低延迟)、工作流程、常见问题(安全、连接管理、数据编码)及Java实现示例,强调错误处理、心跳机制和资源管理的最佳实践。
528 6

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等