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协议通常应用于需要实时通信的场景,包括但不限于:
- 社交聊天:WebSocket可以用于实现实时聊天应用,比如在网页版的聊天应用中,WebSocket可以用于建立持久连接,发送和接收消息。
- 弹幕系统:在视频网站或直播平台上,用户可以发送弹幕。使用WebSocket,可以实时将这些弹幕发送到所有人。
- 多玩家游戏:WebSocket可以用于实现实时多人在线游戏。通过WebSocket,服务器可以实时将游戏状态推送到客户端,从而实现游戏的同步。
- 协同编辑:当多个用户在同一文档上工作时,使用WebSocket可以实时同步每个人的编辑操作,从而避免版本冲突。
- 股票基金实时报价:金融界的数据变化非常快,使用WebSocket可以实时将最新数据推送到客户端。
- 体育实况更新:对于正在进行的体育比赛,实时更新比分和比赛状态是非常重要的。使用WebSocket可以实现这一功能。
- 视频会议/聊天:WebSocket可以用于实现视频会议或聊天应用,使得分布在世界各地的人可以在同一平台上进行实时交流。
- 智能家居:通过WebSocket,智能家居设备可以实时与云端服务器通信,从而进行设备的控制和状态监测。
这些场景的共同特点是都需要实时、双向的通信,而WebSocket协议正好满足这一需求。
WebSocket协议同类型协议
除了WebSocket协议之外,还有其他的实时通信协议,例如:
- HTTP/2 Server Push:HTTP/2协议中引入了一种新技术,即服务器推送(Server Push)。通过这种技术,服务器可以在客户端还没有请求资源之前,主动将资源推送给客户端。这可以减少页面加载时间,提高网页的响应速度。
- WebSockets over QUIC:QUIC是一种基于UDP的传输协议,它提供了比TCP更快的数据传输速度。WebSockets over QUIC是一种基于QUIC的WebSocket协议实现。由于QUIC是基于UDP的,因此它可以避免TCP的一些问题,例如TCP的慢启动和拥塞控制等。
- HTTP/3:HTTP/3是基于QUIC的下一代HTTP协议版本。它提供了比HTTP/2更高的性能和更好的安全性。
WebSocket协议同类型协议对比(用于技术选型)
WebSocket协议是一种实时通信协议,它与其他实时通信协议相比,具有以下特点和区别:
- WebSocket协议:WebSocket是一种全双工通信协议,允许服务器主动向客户端发送数据。它基于TCP协议,但需要在HTTP协议的基础上进行第一次握手。一旦握手成功,数据就可以在单一的TCP连接上进行双向传输。WebSocket的URL格式形如:ws://localhost:80/、wss://localhost:443/。其中,“ws”代表WebSocket,“wss”代表WebSocket Secure,也就是通过TLS或SSL加密的WebSocket。
- HTTP/2 Server Push:HTTP/2 Server Push是HTTP/2协议引入的一种新技术,允许服务器在没有收到客户端请求之前,主动将资源推送给客户端。这可以减少页面加载时间,提高网页的响应速度。
- WebSockets over QUIC:WebSockets over QUIC是一种基于QUIC的WebSocket协议实现。QUIC是一种基于UDP的传输协议,它提供了比TCP更快的数据传输速度。由于QUIC是基于UDP的,因此它可以避免TCP的一些问题,例如TCP的慢启动和拥塞控制等。
- HTTP/3:HTTP/3是基于QUIC的下一代HTTP协议版本。它提供了比HTTP/2更高的性能和更好的安全性。
- MQTT:MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布-订阅模式的消息传输协议。MQTT协议主要用于物联网设备之间的通信,具有低带宽、低能耗、可靠性高、支持异步通信等特点。
总体来说,WebSocket协议与其他实时通信协议相比,具有以下区别:
- WebSocket协议是一种应用层协议,而HTTP、MQTT等协议主要应用于传输层或应用层。
- WebSocket协议可以建立持久连接,实现双向通信,而HTTP等协议通常只能实现单向通信。
- WebSocket协议的数据报文较小,包头非常小,而HTTP等协议的数据报文通常较大,包头也较大。
- WebSocket协议适用于实时交互场景,例如游戏、聊天等,而HTTP等协议适用于请求-响应场景,例如网页浏览、下载等操作。
- 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,三个维度代表的含义分别是:(批量,行,…...
如何使用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方法可以直接使用! 父组…...
淘宝商品API使用示例:如何通过调用外部API来获取淘宝商品价格销量主图详情数据
淘宝上的商品信息量非常之大,商品的详情信息也很齐全。如何通过调用外部API来实现批量获取商品价格销量主图详情等信息呢?上周刚好完成了一个完整的淘宝商品采集项目,今天特来分享一下。 接口名称:item_get 请求地址:…...
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的示例程序,包括基本的功能,使用模板方法: 首先,确保你的项目中添加了以下依赖: <dependency> <groupId>org.springframework.boot</groupId> &l…...
nodejs中如何使用Redis
Redis介绍: Redis 是一个开源的内存数据结构存储器,一般可以用于数据库、缓存、消息代理等,我们常在项目中用redis解决高并发、高可用、高可扩展、大数据存储等问题; 它本质上是一个NoSql(非关系型数据库)…...
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) }输出: [[1]] [[2]]可以看出b改变之后,在a中也发生了改变,…...
PaddleNLP使用Vicuna
LLaMA 模型 LLaMa 是一个大型语言模型,由 Meta 开源。它的全称是 Large Language Model Meta AI,参数量从 70 亿到 650 亿不等。例如,130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3,而且可以在单块 V1…...
jackson常用操作
#jackson常用操作 jackson序列化框架,一些常用的操作 依赖 <!--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应用程序的安装包,可以通过iT…...
试盘Z之主力操盘线
试盘K,以满足特定条件后对该K线标注为试盘字样方便查看。同时通达对9日最低值与9日最高值进行EMA移动平均,得出主力操盘线!试盘Z源码:X_1:REF(EMA((HLC)/3,9),1);X_2:EMA(HHV(HIGH,9),3);X_3:EMA(LLV(LOW,9),3);主力操盘线:EMA(X_1*2-X_3,5),…...
K型热电偶的5个常见设计坑:从运放选型到单片机ADC采样的避坑指南
K型热电偶的5个常见设计坑:从运放选型到单片机ADC采样的避坑指南 在工业测温领域,K型热电偶凭借其宽温区、高性价比和良好的线性度,成为工程师们的首选传感器之一。然而,许多初入行业的硬件工程师在实际应用中常常踩入一些"…...
快速上手腾讯混元OCR:部署过程常见错误及解决方法合集
快速上手腾讯混元OCR:部署过程常见错误及解决方法合集 1. 认识腾讯混元OCR 腾讯混元OCR(HunyuanOCR)是一款基于腾讯混元原生多模态架构的端到端OCR专家模型。作为一款轻量级但功能强大的文字识别工具,它仅用1B参数就实现了多项业…...
WindowsCleaner终极指南:5分钟解决C盘爆红的开源磁盘清理工具
WindowsCleaner终极指南:5分钟解决C盘爆红的开源磁盘清理工具 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否也经常被Windows系统弹出的"…...
LightOnOCR-2-1B部署指南:快速搭建你的私有OCR识别服务
LightOnOCR-2-1B部署指南:快速搭建你的私有OCR识别服务 1. 认识LightOnOCR-2-1B 你是否遇到过需要从大量图片中提取文字的场景?比如扫描的合同、拍照的会议记录,或者历史档案数字化?传统的OCR解决方案要么识别准确率不高&#x…...
【Java 25向量API工业落地白皮书】:20年JVM专家亲授4大高并发场景实战代码(含SIMD加速性能实测数据)
第一章:Java 25向量API工业落地全景概览Java 25正式将Vector API(JEP 478)升级为标准特性,标志着JVM在高性能数值计算领域迈入新阶段。该API通过泛型向量类型(如Vector<Double>)、跨平台掩码操作与自…...
记录模式到底要不要在Spring Boot中落地?阿里、蚂蚁内部技术委员会最新评估报告曝光,87%团队已启动灰度迁移
第一章:记录模式在Spring Boot生态中的战略定位与演进脉络 记录模式(Recording Mode)并非Spring Boot官方术语,而是社区对一类以“可观测性前置”为核心理念的设计范式所形成的共识性称谓——它强调在应用生命周期早期即注入结构化…...
结合卷积神经网络思想优化BERT文本分割边界判定
结合卷积神经网络思想优化BERT文本分割边界判定 文本分割,简单来说,就是把一大段连续的文字,按照意思或者结构,切成一个个有意义的片段。这听起来简单,但在实际应用中,比如处理会议记录、客服对话或者网络…...
终极RippleEffect测试指南:5步确保Android波纹动画质量的完整策略
终极RippleEffect测试指南:5步确保Android波纹动画质量的完整策略 【免费下载链接】RippleEffect Implementation of Ripple effect from Material Design for Android API 9 项目地址: https://gitcode.com/gh_mirrors/ri/RippleEffect RippleEffect是一款为…...
bert-base-chinese详细步骤:如何将test.py改造成支持流式文本处理的微服务
bert-base-chinese详细步骤:如何将test.py改造成支持流式文本处理的微服务 1. 项目背景与价值 在实际的工业场景中,我们经常需要处理大量的文本数据流。传统的批处理方式虽然简单,但无法满足实时性要求高的应用场景。比如智能客服系统需要实…...
