【ESP32 WiFi篇(六)】ESP32 WebSocket

news2024/11/15 8:41:02

文章目录

  • 1. WebSocket 概述
  • 2. WebSocket 的通信原理和机制
  • 3. WebSocket 与 HTTP 的关系
    • 3.1 相同点
    • 3.2 不同点
    • 3.3 关系
  • 4. WebSocket 技术出现之前,Web端实现即时通讯的方法有哪些?
  • 5. HTTP 存在的问题
  • 6. WebSocket 的特点
  • 7. WebSocket 数据帧格式

1. WebSocket 概述

  在网络中的两个应用程序(进程)需要全双工相互通信(全双工即双方可同时向对方发送消息),需要用到的就是socket,它能够提供端对端通信,对于程序员来讲,他只需要在某个应用程序的一端(暂且称之为客户端)创建一个socket实例并且提供它所要连接一端(暂且称之为服务端)的IP地址和端口,而另外一端(服务端)创建另一个socket并绑定本地端口进行监听,然后客户端进行连接服务端,服务端接受连接之后双方建立了一个端对端的TCP连接,在该连接上就可以双向通讯了,而且一旦建立这个连接之后,通信双方就没有客户端服务端之分了,提供的就是端对端通信了。我们可以采取这种方式构建一个桌面版的im程序,让不同主机上的用户发送消息。从本质上来说,socket并不是一个新的协议,它只是为了便于程序员进行网络编程而对tcp/ip协议族通信机制的一种封装。

  websocket是html5规范中的一个部分,它借鉴了socket这种思想,为web应用程序客户端和服务端之间(注意是客户端服务端)提供了一种全双工通信机制。同时,它又是一种新的应用层协议,websocket协议是为了提供web应用程序和服务端全双工通信而专门制定的一种应用层协议,通常它表示为:ws://echo.websocket.org/?encoding=text HTTP/1.1,可以看到除了前面的协议名和http不同之外,它的表示地址就是传统的url地址。

  可以看到,websocket并不是简单地将socket这一概念在浏览器环境中的移植。


2. WebSocket 的通信原理和机制

在这里插入图片描述

既然是基于浏览器端的web技术,那么它的通信肯定少不了http,websocket本身虽然也是一种新的应用层协议,但是它也不能够脱离http而单独存在。具体来讲,我们在客户端构建一个websocket实例,并且为它绑定一个需要连接到的服务器地址,当客户端连接服务端的时候,会向服务端发送一个类似下面的http报文:

GET ws://echo.websocket.org/?encoding=text HTTP/1.1
Origin: http://websocket.org
Cookie: __utma=99as
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: uRovscZjNol/umbTt5uKmw==
Upgrade: websocket
Sec_WebSocket-Version: 13

可以看到,这是一个http get请求报文,注意该报文中有一个upgrade首部,它的作用是告诉服务端需要将通信协议切换到websocket,如果服务端支持websocket协议,那么它就会将自己的通信协议切换到websocket,同时发给客户端类似于以下的一个响应报文头:

HTTP/1.1 101 WebSocket Protocol Handshake
Date: Fri, 10 Feb 2012 17:38:18 GMT
Connection: Upgrade
Server: Kaazing Gateway
Upgrade: WebSocket
Access-Control-Allow-Origin: http://websocket.org
Access-Control-Allow-Credentials: true
Sec-WebSocket-Accept: rLHCkw/SKs09GAH/ZSFhBATDKrU=
Access-Control-ALlow-Headers: content-type

返回的状态码为101,表示同意客户端协议转换请求,并将它转换为websocket协议。以上过程都是利用http通信完成的,称之为websocket协议握手(websocket Protocol handshake),进过这握手之后,客户端和服务端就建立了websocket连接,以后的通信走的都是websocket协议了。所以总结为websocket握手需要借助于http协议,建立连接后通信过程使用websocket协议。同时需要了解的是,该websocket连接还是基于我们刚才发起http连接的那个TCP连接。一旦建立连接之后,我们就可以进行数据传输了,websocket提供两种数据传输:文本数据和二进制数据。

基于以上分析,我们可以看到,websocket能够提供低延迟,高性能的客户端与服务端的双向数据通信。它颠覆了之前web开发的请求处理响应模式,并且提供了一种真正意义上的客户端请求,服务器推送数据的模式,特别适合实时数据交互应用开发。


3. WebSocket 与 HTTP 的关系

3.1 相同点

  1. 都是基于tcp的,都是可靠性传输协议
  2. 都是应用层协议

3.2 不同点

  1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息
  2. HTTP是单向的
  3. WebSocket是需要浏览器和服务器握手进行建立连接的
  4. 而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接

3.3 关系

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的,流程如下:

  1. 首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
  2. 然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
  3. 最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。

4. WebSocket 技术出现之前,Web端实现即时通讯的方法有哪些?

  1. 定期轮询的方式
    客户端按照某个时间间隔不断地向服务端发送请求,请求服务端的最新数据然后更新客户端显示。这种方式实际上浪费了大量流量并且对服务端造成了很大压力。
  2. SSE(Server-Sent Event,服务端推送事件)
  3. Comet技术

5. HTTP 存在的问题

  1. http是一种无状态协议,每当一次会话完成后,服务端都不知道下一次的客户端是谁,需要每次知道对方是谁,才进行相应的响应,因此本身对于实时通讯就是一种极大的障碍
  2. http协议采用一次请求,一次响应,每次请求和响应就携带有大量的header头,对于实时通讯来说,解析请求头也是需要一定的时间,因此,效率也更低下
  3. 最重要的是,需要客户端主动发,服务端被动发,也就是一次请求,一次响应,不能实现主动发送

6. WebSocket 的特点

  1. 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
  2. HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)

7. WebSocket 数据帧格式

在这里插入图片描述


新手入门:websocket
websocket 简述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单局域网网络故障排查和处置

简单局域网网络故障排查和处置一、了解基本网络构成1. IP传输通信图2.有线网络(一)物理层面(1)网线(2)网线的制作(3)网卡接口(4)光纤(5&#xff0…

【图像配准】使用OpenCV进行多图配准拼接

本篇主要利用OpenCV自带的配准拼接函数Stitcher_create来实现多幅图像的配准拼接 代码参考自:https://github.com/samggggflynn/image-stitching-opencv 图像拼接创建步骤 通常来说,根据多个图像创建全景图的步骤为以下几步: 检测两张图像的…

【pytest】三、pytest之setup和teardown,及封装

一、引言: 1)setup的作用:用来实现执行前的一些初始化操作(如:数据准备、连接设备、打开APP/浏览器、创建日志对象、创建数据库连接、创建接口的请求对象等操作); 2)teardown的作用:用来实现执…

C++学习/温习笔记:新型源码学编程(二)

写在前面 面向初学者撰写专栏,个人原创的学习C/C笔记(干货)编程练习所作源代码输出内容为中文,便于理解如有错误之处请各位读者指正请读者评论回复、参与投票,反馈给作者,我会获得持续更新笔记干货的动力。…

放弃内卷,创造新市场

在疫情,突然爆发的俄乌冲突,还有全球的物价上涨情况等社会问题逐渐变得尖锐的动荡中,让原本就不好的经济形势进入了寒冬期,各个行业也陆续进入了寒冬期,纷纷进入了内卷模式,尤其是对于跨境电商行业来说&…

linux 部署jmeter报错处理

一、linux 安装jdk Java Downloads | Oracle 二、 linux上传jmeter 2.1 上传jmeter jmeter 下载地址: Apache JMeter - Download Apache JMeter 注意: 我先在我本地调试脚本(mac环境),调试完成后,再在…

java基于ssm的饰品商城的设计与实现

管理员;管理员使用本系统涉到的功能主要有个人中心、用户管理、商品分类管理、商品信息管理、活动商品管理、知识普及管理、饰品圈、系统管理、订单管理等功能。 用户进入前台可以查看首页、商品信息、活动商品、知识普及、饰品圈、公告信息、个人中心、后台管理、购…

全国产!全志A40i+Logos FPGA核心板(4核ARM Cortex-A7)硬件说明

硬件资源 SOM-TLA40iF核心板板载ARM、FPGA、ROM、RAM、晶振、电源、LED等硬件资源,并通过B2B连接方式引出IO。核心板所有器件(包括B2B连接器)均采用国产工业级方案,国产化率100%。 图 1 核心板硬件框图

哪有什么互联网寒冬?献给java程序员的面试全攻略,修炼内功,强大自己才是王道!

最近很多人在讨论,学Java还有前途吗?转行Java有希望吗?Java还值得学吗?诸如此类的问题太多了,见怪不怪,不用担心太多,我们来仔细分析一下为什么会出现这种情况。 首先,互联网行业近几年确实很…

scrapy构造并发送请求

scrapy数据建模与请求 学习目标: 应用 在scrapy项目中进行建模应用 构造Request对象,并发送请求应用 利用meta参数在不同的解析函数中传递数据 1. 数据建模 通常在做项目的过程中,在items.py中进行数据建模 1.1 为什么建模 定义item即提前…

【Linux】操作系统(Operator System)

目录 一、操作系统是什么 1、操作系统概念 2、操作系统的定位 3、设计OS的目的 4、操作系统的重要性 二、 理解操作系统 三、系统调用 系统调用和库函数的关系 一、操作系统是什么 1、操作系统概念 任何计算机系统都包含一个基本的程序集合,称为操作系统…

【网络设备排障怎么破?这五个命令申请出战!】

1.网络排错常用诊断工具介绍 主流网络设备产品提供了一套完整的命令集,可以用于监控网络互联环境的工作状况和解决基本的网络故障。主要包括以下命令: Ping命令 Traceroute命令 Show命令 Clear命令 Debug命令 1.1 Ping命令 1.原理: “ping”…

vue+element-ui项目搭建记录

一. 安装vue(省略) 二. 新建vue项目并启动 1. 命令行执行新建项目命令: vue init webpack TestElemntUI3 //TestElemntUI3为项目名称执行结果发现有问题: 2. 需要安装一个全局加载项,执行命令: npm i…

ARM+DSP!全志T113-i+玄铁HiFi4开发板硬件说明书(1)

前 言 本文档主要介绍开发板硬件接口资源以及设计注意事项等内容,测试板卡为全志T113-i+玄铁HiFi4开发板。由于篇幅问题,本篇文章共分为上下两集,点击账户可查看更多内容详情,开发问题欢迎留言,感谢关注。 T113-i处理器的IO电平标准一般为1.8V和3.3V,上拉电源一般不超过…

DSTL与PA咨询公司助力英国国防部发展“量子+军事”领域

DSTL的量子实验室(图片来源:网络)如何充分利用国防和安全领域的资源并确保人员安全?快速准确的决策至关重要。人类虽然是决策过程的重要参与者,但是快节奏的决策过程对人类来说变得越来越复杂。国防科学技术实验室&…

18种可以提高接口性能的方案

之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后 真枪实弹搞了一次接口性能优化,最后接口从11.3s降为170ms。本文将跟小伙伴们分享接口优化的一些通用方案。 1. 批量思想:批量操作数据库 优化…

分布式系统架构解决方案—Dubbo

文章目录什么是分布式系统?系统架构Dubbo简介RPC的概念dubbo节点角色dubbo节点调用关系Dubbo 安装管理端Dubbo-监控统计中心什么是分布式系统? “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统&…

第一次创业,注册什么类型的公司更好?

前言 几乎每一个打工者都有一颗当老板的心,大喊一声:"大丈夫生居天地间,岂能郁郁久居人下",于是一拍桌子就辞职创业,现实往往都是潦草收场,看下面一段统计数据: 中国小微企业平均存活周期4.13年&…

2023牛客寒假算法基础集训营4(10/13)

清楚姐姐学信息论数学&#xff0c;只需要求x的y次方和y的x次方那个大选哪个&#xff0c;除了2和3时是3多&#xff0c;其他情况都是数越小能代表的数越多AC代码&#xff1a;#include <bits/stdc.h> using namespace std; using LL long long; int main() {ios::sync_with…

7年老码农,平凡的2022

前言 嗨&#xff0c;大家好&#xff0c;我是希留。一个被迫致力于成为一名全栈开发的菜鸟。 2022年对于大多数人而言是难忘的一年&#xff0c;受疫情影响、经历行业寒冬。裁员、失业等情况总是笼罩着本就焦虑不安的生活。 而我的2022&#xff0c;用一个关键词就可以概括&…