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…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
