websocket协议学习笔记(代码片段)

ShiPeng ShiPeng     2022-12-14     764

关键词:

一、WebSocket协议简介

WebSocket是应用层协议。
用于C/S架构应用中实现双向通信。
虽然WebSocket协议在建立连接时会使用HTTP协议,但这并不意味着WebSocket协议是基于HTTP协议实现的。

二、WebSocket协议与HTTP协议的区别

1、通信方式不同

1)WebSocket是双向通行模式,客户端与服务端之间只有在握手时使用了HTTP的“请求-响应”模式,而一旦建立连接完成后,通信则使用双向模式交互。WebSocket模式客户端和服务端可以互相发消息,而HTTP发消息是单向的。

2、协议格式不同

1)HTTP协议比较臃肿,而WebSocket协议比较清理
2)HTTP协议一个数据包就是个完整的消息;而WebSocket客户端与服务端通信的最小单位是帧(frame),由1个或多个帧组成一条完整的消息(message)。即:发送端将消息切割成多个帧,并发送给服务端;服务端接收消息帧,并将关联的帧重新组装成完整的消息。

WebSocket的协议格式:

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |    Extended payload length    |
|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
|N|V|V|V|       |S|             |   (if payload len==126/127)   |
| |1|2|3|       |K|             |                               |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|     Extended payload length continued, if payload len == 127  |
+ - - - - - - - - - - - - - - - +-------------------------------+
|                               |Masking-key, if MASK set to 1  |
+-------------------------------+-------------------------------+
| Masking-key (continued)       |          Payload Data         |
+-------------------------------- - - - - - - - - - - - - - - - +
:                     Payload Data continued ...                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|                     Payload Data continued ...                |
+---------------------------------------------------------------+

HTTP请求消息格式:

Request-LineCRLF
general-headerCRLF
request-headerCRLF
entity-headerCRLF
CRLF
[ message-body ]

HTTP响应消息格式:

Status-LineCRLF
general-headerCRLF
response-headerCRLF
entity-headerCRLF
CRLF
[ message-body ]

三、为什么要使用WebSocket通信协议

1、客户端定时查询

客户端每10秒查询一次服务端

2、长轮询机制

长轮询机制是对客户端定时轮询机制的改进,即:客户端依旧保持定时发送请求给服务端,但服务端并不立即响应,而是等到有真正数据更新时,才发送给客户端。实际上,并不是当没有数据更新时服务端就永远不响应客户端,而是需要在等待一个超长时间之后结束此次长轮询请求。

3、HTTP Streaming

无论是长轮询还是客户端定时查询,都需要客户端不断发请求给服务端,而HTTP Streaming试图改变这种方式,其实现机制为:客户端发送获取数据更新请求到服务端时,服务端将保持该请求的响应数据流一直打开,只要有数据更新就实时地发送给客户端。

四、WebSocket协议优势总结

1、支持双向通信,实时性更强
2、支持二进制
3、较少的控制开销,连接建立后,WebSocket客户端、服务端进行数据交换时,协议控制的数据包头部较小
4、支持扩展

相比客户端定时查询方式,当数据更新频率不确定时,长轮询机制能够明细地减少请求数。

springboot+websocket学习(代码片段)

Springboot+WebSocket聊天室项目WebSocket介绍WebSocket的特点webSocket协议客户端(浏览器)实现websocket对象websocket事件WebSocket方法服务端实现服务端如何接受客户端发送过来的数据呢?服务端如何推送数据给客户端呢?基于WebSocket的网页聊... 查看详情

tcp协议学习笔记(代码片段)

TCP(TransmissionControlProtocol传输控制协议)协议是基于IP协议,面向连接的、可靠的、基于字节流的传输层通信协议。基于IP协议:在TCP/IP协议栈中,TCP协议是基于IP协议之上传输的,TCP协议报文中的源端口... 查看详情

nrf52832学习笔记蓝牙协议层级理解(代码片段)

nrf52832学习笔记(七)蓝牙协议层级理解本文主要由一下几篇文档摘录汇总而成,如有错误欢迎斧正da14531蓝牙协议文档深入浅出低功耗蓝牙(BLE)协议栈低功耗蓝牙ATT/GATT/Profile/Service/Characteristic规格解读三种蓝牙架构实... 查看详情

swift学习笔记-协议和扩展(代码片段)

协议声明使用protocol来声明协议。protocolExampleProtocolvarsimpleDescription:Stringgetmutatingfuncadjust()协议的遵循类、枚举以及结构体,都可以遵循某个协议。类classSimpleClass:ExampleProtocolvarsimpleDescription:String=“Averysimp 查看详情

opc协议学习笔记?(代码片段)

...程序和现场过程控制应用建立了桥梁。换句话说,OPC协议就是上位机和PLC之间的一个桥梁,一种通讯协议。OPC协定包括:DA(DataAccess)规范:访问数据 查看详情

stm32学习笔记(15)——spi协议(代码片段)

STM32学习笔记(15)——SPI协议一、SPI协议简介1.物理层2.协议层(1)通讯的开始与停止(2)时钟极性CPOL、时钟相位CPHA二、STM32的SPI外设1.通讯引脚2.时钟控制逻辑3.数据控制逻辑4.整体控制逻辑5.STM32的SPI通... 查看详情

网络协议学习笔记(代码片段)

定义网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议主要由三个要素组成:语义、语法及时序;语义表示要做什么,语法表示要怎么做,时序表示做的顺序。网络协议是网络上... 查看详情

《攻防世界》学习笔记——web篇(代码片段)

《攻防世界》学习笔记——web篇01Robots协议02BACKUP03Cookie04disabled_button(chrome游览器F12指南)05弱口令06PHP——最好的语言07http请求01Robots协议Robots协议全称”网络爬虫排除标准”(RobotsExclusionProtocol),又简称”爬虫协议”,用于... 查看详情

rip学习笔记(代码片段)

RIP学习笔记1.距离矢量DVRIP2.链路状态LSRIP路由信息协议最早的动态路由协议开启RIP的协议把自己的路由表广播给邻居学习到的路由表180s没有更新则会删除RIP选路依靠跳数Pre可信度cost开销值路由每传第一次跳数+1[外链图片转存... 查看详情

redis学习笔记—客户端通讯协议resp(代码片段)

Redis制定了RESP(REdisSerializationProtocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别发送命令格式RESP的规定一条命令的格式如下,CRLF代... 查看详情

计算机网络学习笔记10-http协议(代码片段)

HTTP协议:超文本传输协议,是基于TCP的应用层协议,它规定了浏览器和服务器通信的规则特点:1、支持C/S架构2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径,常用方法:GET、POST3、... 查看详情

内网学习笔记|ssh隧道使用(代码片段)

 前言SSH全称 SecureShell,从它的名字来看这个协议就比较安全。SSH协议是一种应用层协议,支持几乎所有UNIX、Linux平台。得益于SSH协议在传输过程中都是加密,所以在流量层面也较难区分合法的SSH流量和攻击者产生的... 查看详情

学习笔记之openssl文件加密ca证书的创建(代码片段)

...础知识  首先openssl的英文是SecureSocketsLaye。安全套接层协议。可以在Internet上提供秘密性传输。SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建... 查看详情

学习笔记(二十一)——使用smtp发送电子邮件(代码片段)

一、常用的电子邮件协议常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍1.1、SMTP协议SMTP的全称是"SimpleMailTransferProto... 查看详情

websocket入门(代码片段)

Websocket入门前言基础1.什么是webSocket2.websocket与其他协议的区别3.使用websocket简单代码实现前言基础TCP/IP五层模型与OSI七层模型的协议更多计网相关的知识可以看这篇文章【计算机网络-五层和七层模型】1.什么是webSocketWebSocket协议... 查看详情

计网学习笔记(代码片段)

...ApplicationSQL注入XSS攻击OSI体系与TCP/IP模型TCP,UDP常见应用层协议ARP地址解析IP地址的分类TCP和UDP区别用户数据报协议U 查看详情

计算机网络学习笔记5-udp广播(代码片段)

...单个服务器与多个客户主机通信时减少分组流通以下几个协议都用到广播1、地址解析协议(ARP)通过IP得到mac地址2、动态主机配置协议(DHCP)自动主机IP3、网络时间协议&#x 查看详情

rabbitmq学习笔记(代码片段)

rabbitmqAMQP协议安装如何使用AMQP协议生产者消费者队列一个队列存多条消息消息连接发消息和接收消息都是必须先建立连接通道(channel)一个连接有多个通道,消息会在通道里面流转,之后到达消费者交换机(... 查看详情