当前位置: 首页 > news >正文

WebSocket--技术文档--基本概念--《快速了解WebSocket协议》

阿丹:

             不断学习新技术,丰富自己了解更多才能扩展更多世界可能。 

官网

WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区

软件简介

WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebSocket 通信协议于 2011 年被 IETF 定为标准 RFC 6455,WebSocketAPI 被 W3C 定为标准。

 

现在,很多网站为了实现即时通讯 (real-time),所用的技术都是轮询 (polling)。轮询是在特定的的时间间隔 (time interval)(如每 1 秒),由浏览器对服务器发出 HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的 HTTP request d 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求 (request),然而 HTTP request 的 header 是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。

而最比较新的技术去做轮询的效果是 Comet – 用了 AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求 (reuqest)。

在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此 WebSocket 协议中,为我们实现即使服务带来了两大好处:

1. Header

互相沟通的 Header 是很小的 - 大概只有 2 Bytes

2. Server Push

服务器可以主动传送数据给客户端

阿丹解读:

        WebSocket是基于HTTP协议的升级。WebSocket协议的底层原理是基于HTTP协议的,但是它不同于HTTP协议,因为它允许服务器主动向客户端发送数据。WebSocket协议的底层原理是通过HTTP协议的升级来实现的。当客户端向服务器发送一个WebSocket请求时,服务器会返回一个HTTP 101状态码,表示协议已经升级。在升级之后,客户端和服务器之间的通信就不再是基于HTTP协议了,而是基于WebSocket协议。就是不在需要我们自己前台去通过定时器等等去后台进行获取了,而是通过这个协议类似于发布订阅模式来进行的。

WebSocket协议的使用场景

WebSocket协议通常应用于需要实时通信的场景,包括但不限于:

  1. 社交聊天:WebSocket可以用于实现实时聊天应用,比如在网页版的聊天应用中,WebSocket可以用于建立持久连接,发送和接收消息。
  2. 弹幕系统:在视频网站或直播平台上,用户可以发送弹幕。使用WebSocket,可以实时将这些弹幕发送到所有人。
  3. 多玩家游戏:WebSocket可以用于实现实时多人在线游戏。通过WebSocket,服务器可以实时将游戏状态推送到客户端,从而实现游戏的同步。
  4. 协同编辑:当多个用户在同一文档上工作时,使用WebSocket可以实时同步每个人的编辑操作,从而避免版本冲突。
  5. 股票基金实时报价:金融界的数据变化非常快,使用WebSocket可以实时将最新数据推送到客户端。
  6. 体育实况更新:对于正在进行的体育比赛,实时更新比分和比赛状态是非常重要的。使用WebSocket可以实现这一功能。
  7. 视频会议/聊天:WebSocket可以用于实现视频会议或聊天应用,使得分布在世界各地的人可以在同一平台上进行实时交流。
  8. 智能家居:通过WebSocket,智能家居设备可以实时与云端服务器通信,从而进行设备的控制和状态监测。

这些场景的共同特点是都需要实时、双向的通信,而WebSocket协议正好满足这一需求。

WebSocket协议同类型协议

除了WebSocket协议之外,还有其他的实时通信协议,例如:

  1. HTTP/2 Server Push:HTTP/2协议中引入了一种新技术,即服务器推送(Server Push)。通过这种技术,服务器可以在客户端还没有请求资源之前,主动将资源推送给客户端。这可以减少页面加载时间,提高网页的响应速度。
  2. WebSockets over QUIC:QUIC是一种基于UDP的传输协议,它提供了比TCP更快的数据传输速度。WebSockets over QUIC是一种基于QUIC的WebSocket协议实现。由于QUIC是基于UDP的,因此它可以避免TCP的一些问题,例如TCP的慢启动和拥塞控制等。
  3. HTTP/3:HTTP/3是基于QUIC的下一代HTTP协议版本。它提供了比HTTP/2更高的性能和更好的安全性。

WebSocket协议同类型协议对比(用于技术选型)

WebSocket协议是一种实时通信协议,它与其他实时通信协议相比,具有以下特点和区别:

  1. WebSocket协议:WebSocket是一种全双工通信协议,允许服务器主动向客户端发送数据。它基于TCP协议,但需要在HTTP协议的基础上进行第一次握手。一旦握手成功,数据就可以在单一的TCP连接上进行双向传输。WebSocket的URL格式形如:ws://localhost:80/、wss://localhost:443/。其中,“ws”代表WebSocket,“wss”代表WebSocket Secure,也就是通过TLS或SSL加密的WebSocket。
  2. HTTP/2 Server Push:HTTP/2 Server Push是HTTP/2协议引入的一种新技术,允许服务器在没有收到客户端请求之前,主动将资源推送给客户端。这可以减少页面加载时间,提高网页的响应速度。
  3. WebSockets over QUIC:WebSockets over QUIC是一种基于QUIC的WebSocket协议实现。QUIC是一种基于UDP的传输协议,它提供了比TCP更快的数据传输速度。由于QUIC是基于UDP的,因此它可以避免TCP的一些问题,例如TCP的慢启动和拥塞控制等。
  4. HTTP/3:HTTP/3是基于QUIC的下一代HTTP协议版本。它提供了比HTTP/2更高的性能和更好的安全性。
  5. MQTT:MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布-订阅模式的消息传输协议。MQTT协议主要用于物联网设备之间的通信,具有低带宽、低能耗、可靠性高、支持异步通信等特点。

总体来说,WebSocket协议与其他实时通信协议相比,具有以下区别:

  1. WebSocket协议是一种应用层协议,而HTTP、MQTT等协议主要应用于传输层或应用层。
  2. WebSocket协议可以建立持久连接,实现双向通信,而HTTP等协议通常只能实现单向通信。
  3. WebSocket协议的数据报文较小,包头非常小,而HTTP等协议的数据报文通常较大,包头也较大。
  4. WebSocket协议适用于实时交互场景,例如游戏、聊天等,而HTTP等协议适用于请求-响应场景,例如网页浏览、下载等操作。
  5. MQTT协议适用于物联网设备之间的通信,具有低带宽、低能耗等特点。

在选择实时通信协议时,需要根据具体的应用场景和需求来选择最合适的协议。

相关文章:

WebSocket--技术文档--基本概念--《快速了解WebSocket协议》

阿丹: 不断学习新技术,丰富自己了解更多才能扩展更多世界可能。 官网 WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区 软件简介 WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebS…...

flutter报错-cmdline-tools component is missing

安装完androidsdk和android studio后,打开控制台,出现错误 解决办法 找到自己安装android sdk的位置,然后安装上,并将下面的勾选上 再次运行 flutter doctor 不报错,出现以下画面 Doctor summary (to see all det…...

torch.bmm功能解读

bmm 是 batched matrix multiple 的简写,即批量矩阵乘法,矩阵是二维的,加上batch一个维度,因此该函数的输入必须是两个三维的 tensor,三个维度代表的含义分别是:(批量,行&#xff0c…...

如何使用Puppeteer进行金融数据抓取和预测

导语 Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、PDF生成等功能。本文将介绍如何使用Puppeteer进行金融数据抓取和预测,以及如何使用亿牛云爬虫代理提高爬虫效果。 概述 金融数据抓取是指从…...

Linux下 Socket服务器和客户端文件互传

目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器,实现服务器和客户端的文件传输。…...

Nginx详解 第五部分:Ngnix反向代理(负载均衡 动静分离 缓存 透传 )

Part 5 一、正向代理与反向代理1.1 正向代理简介1.2 反向代理简介 二、配置反向代理2.1 反向代理配置参数2.1.1 proxy_pass2.1.2 其余参数 2.2 配置实例:反向代理单台web服务器2.3 代理转发 三、反向代理实现动静分离四、缓存功能五、反向代理客户端的IP透传5.1 原理概述5.2 一…...

中国行政区域带坐标经纬度sql文件及地点获取经纬度方法

文章目录 前言一、如何获取某地的经纬度?1.1 搜索百度地图1.2 在下方找到地图开放平台1.3 下滑找到坐标拾取器1.4 使用 二、sql文件2.1 创建表2.2 插入数据 前言 当工作业务上需要涉及地图,给前端返回经纬度等场景,需要掌握区域经纬度的获取…...

[国产MCU]-W801开发实例-WiFi网络扫描

WiFi网络扫描 文章目录 WiFi网络扫描1、WiFi模块介绍2、WiFi扫描API介绍3、WiFi扫描实例本文将演示如何使用WiFi模块进行WiFi网络扫描。 1、WiFi模块介绍 W801的WiFi具有如下特性: 支持 GB15629.11-2006 IEEE802.11 b/g/n支持 Wi-Fi WMM/WMM-PS/WPA/WPA2/WPS支持 EDCA信道接入…...

SpringBoot使用kafka事务-消费者方

前言 在上一篇文章中,写到了如何在springboot中生产者如何使用kafka的事务,详情链接:Springboot使用kafka事务-生产者方 那么,这一篇就接着上篇所写的内容,讲解一下再springboot中消费者如何使用kafka的事务。 实现…...

C# 实现PictureBox从指定的文件夹内进行翻页操作

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

Eureka 注册中心的使用

环境 springboot springcloud Eureka-Server注册中心服务端 pom.xml导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.7.RELEAS…...

vue3 组件通信方式

文章目录 组件通信方式props自定义事件全局事件总线v-modeluseAttrsref与$parentprovide与injectpiniaslot 组件通信方式 props ​ 实现父子组件通信,在vue3中可以通过defineProps获取父组件传递的数据。且在组件内部不需要引入defineProps方法可以直接使用&#xff01; 父组…...

淘宝商品API使用示例:如何通过调用外部API来获取淘宝商品价格销量主图详情数据

淘宝上的商品信息量非常之大&#xff0c;商品的详情信息也很齐全。如何通过调用外部API来实现批量获取商品价格销量主图详情等信息呢&#xff1f;上周刚好完成了一个完整的淘宝商品采集项目&#xff0c;今天特来分享一下。 接口名称&#xff1a;item_get 请求地址&#xff1a…...

RK3568-android11-适配ov13850摄像头

硬件连接 主要分为两部分: mipi接口:传输摄像头数据 i2c接口:配置摄像头和对焦马达芯片寄存器相关驱动 |-- arch/arm64/boot/dts/rockchip DTS配置文件 |-- drivers/phy/rockchip/|-- phy-rockchip-mipi-rx.c mipi dphy 驱动 |-- drivers/media||-- platform/rockchip/isp1…...

基于Sider-chatgpt3.5-编写一个使用springboot2.5连接elasticsearch7的demo程序,包括基本的功能,用模板方法

下面是一个使用Spring Boot 2.5连接Elasticsearch 7的示例程序&#xff0c;包括基本的功能&#xff0c;使用模板方法&#xff1a; 首先&#xff0c;确保你的项目中添加了以下依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> &l…...

nodejs中如何使用Redis

Redis介绍&#xff1a; Redis 是一个开源的内存数据结构存储器&#xff0c;一般可以用于数据库、缓存、消息代理等&#xff0c;我们常在项目中用redis解决高并发、高可用、高可扩展、大数据存储等问题&#xff1b; 它本质上是一个NoSql&#xff08;非关系型数据库&#xff09;…...

golang append坑

查看如下代码输出 package mainimport "fmt"func main() {a : make([][]int, 0)b : make([]int, 0)b append(b, 1)a append(a, b)fmt.Println(a)b[0] 2fmt.Println(a) }输出&#xff1a; [[1]] [[2]]可以看出b改变之后&#xff0c;在a中也发生了改变&#xff0c…...

PaddleNLP使用Vicuna

LLaMA 模型 LLaMa 是一个大型语言模型&#xff0c;由 Meta 开源。它的全称是 Large Language Model Meta AI&#xff0c;参数量从 70 亿到 650 亿不等。例如&#xff0c;130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3&#xff0c;而且可以在单块 V1…...

jackson常用操作

#jackson常用操作 jackson序列化框架&#xff0c;一些常用的操作 依赖 <!--Jackson包--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.15.2</version></de…...

ios ipa包上传需要什么工具

目录 ios ipa包上传需要什么工具 前言 一、IPA包的原理 二、IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iT…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...