1.探索WebSocket:实时网络的心跳!
序言
你可能听说过"WebSokcet"这个词,感觉它好像很高深,但其实它是一个超级酷的小工具,让我们在Web应用里实现实时通信。想象一下,你可以像聊天一样,在浏览器和服务器之间来回“畅聊“,没有延迟,没有刷新,没有重新请求的等待时间。今天,我们就来一探WebSocket的奥秘,看看它是怎么让互联网更有“生命力“的!
1. 什么是WebSocket
WebSokcet是HTML5引入的一种网络协议,最初由IEFT(互联网工程任务组)在2011年发布,专为双向通信设计。简单来说,它让浏览器和服务器之间可以像打电话一样,保持着一个实时的“通话线路”,随时互相传递信息。
在普通的HTTP请求里,浏览器每次想要一些数据,都需要单独“打电话”给服务器,并等待回应,收到后电话就挂断了——这种方式叫短连接。而WebSocket却能让浏览器和服务器之间维持一条长连接,使他们随时可以向对方传递消息,就像微信、微博的实时消息推送那样!更妙的是,WebSokcet建立连接后,通信速度更快且更节省资源。
2. WebSocket的几个关键特性
- 双向通信: WebSocket可以让客户端(浏览器)和服务器彼此都可以主动发消息,而不是等待请求。
- 长连接: 连接一旦建立,不需要每次通信都重新发起连接请求
- 低延迟: 在频繁通信的场景中,比HTTP短连接更省时省力。
- 轻量级: WebSocket协议投很轻巧,减少了数据传输的开销。
3. WebSocket的实际应用场景
WebSocket广泛应用在那些需要实时数据更新的应用里:
- 在线聊天: 比如微信、QQ等即时通讯应用,它们需要实现消息的实时传输,才能让你和朋友“即时聊天”
- 实时推送:各类推送通知,比如微博、新闻网站的实时热点推送、双向的通信能力
- 在线游戏: 多人在线游戏里的实时对战、积分更新都需要低延迟、双向的通信能力。
- 股票/加密货币行情: 金融市场瞬息万变,很多股票、比特币行情数据都依赖WebSocket,确保用户看到的是“秒级”的更新。
- 实时协作工具: 文档、表格等协作工具,需要实时共享数据,大家编辑时能立刻看到彼此的改动。
4. 如何使用WebSocket? 一个简单的示例
WebSocket的使用很简单,浏览器端只需要几行代码,就能和服务建立通信。以下是一个使用JavaScript和WebSocket的基本示例。
//1. 创建WebSocket 连接
const socket = new WebSocket("wss://example.com/socket")//2.连接成功后触发
socket.onopen = function(event){console.log('Connected to WebSocket');socket.send('Hello,Server!');// 向服务器发送信息
}//3.监听信息
socket.onmessage = function(event){console.log('Message from server:',event.data)
}//4.监听关闭事件
socket.onclose = function(event){console.log('WebSocket connection closed:',event)
}//5.错误处理
socket.onerror = function(error){console.error('WebSocket error:',error)
}
在这个例子中,我们首先创建了一个WebSocket连接,并设置了几个监听器:
● onopen: 连接时触发
● onmessage: 当服务器发送消息时触发
● onclose: 当连接关闭时触发。
● onerror: 如果出现错误时触发
5. 浏览器观察数据交互
以bilibili的弹幕为例,打开控制台,或者F12然后查看网络(NetWork),选择过滤WS协议的请求,我们随机选择一个请求,进行查看。其中101 代表的是成功的消息。
我们查看下Message消息,我们可以看到数据在浏览器和服务端之间进行交互:
我们可以看到他们数据传递格式采用的是二进制,我们也可以使用JSON格式进行传递,这样数据的可读性就更高。
其中图中绿色箭头向上的数据是客户端发送给服务端的数据,橙色箭头向下的数据是服务端推送给客户端的数据。
6. WebSocket的工作流程
- 建立连接: 客户端向服务器发送WebSocket连接请求,这类似于一次普通的HTTP请求
- 握手成功: 一旦握手成功,客户端和服务器之间便建立了WebSocket长连接。
- 数据通信: 连接保持着,客户端和服务器可随时互发信息,不需要重新请求。
- 关闭连接: 通信完成户,任何一方都可以主动关闭连接。
7. WebSocket 和 HTTP的区别
WebSocket 并非替代HTTP,而是一种补充。HTTP是无状态、单向的协议,适用于一般网页的请求-响应模式。
而WebSocket则是有状态的,适用于需要频繁双向通信的场景。WebSocket通过建立长连接,可以极大减少宽带开销和延迟,但一般只用于少数需要实时互动的应用。
相关文章:

1.探索WebSocket:实时网络的心跳!
序言 你可能听说过"WebSokcet"这个词,感觉它好像很高深,但其实它是一个超级酷的小工具,让我们在Web应用里实现实时通信。想象一下,你可以像聊天一样,在浏览器和服务器之间来回“畅聊“,没有延迟…...

uniapp学习(010-2 实现抖音小程序上线)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第113p的内容 文章目录 抖音小程序下载抖音开发者工具先去开发者工具里进行测试 抖音开放平台配置开始打包上传…...

测试和实施面试题收集
前端+测试+运维+算法综合 前端部分面试题 判断第二个日期比第一个日期大 如何用脚本判断用户输入的的字符串是下面的时间格式2004-11-21 必须要保证用户的输入是此格式,并且是时间,比如说月份不大于12等等,另外我需要用户输入两个,并且后一个要比前一个晚,只允许用JAVASCR…...

【Vue3】一文全览基础语法-案例程序及配图版
文章目录 Vue应用基本结构模块化开发ref和reactive绑定事件 v-on 简写显示和隐藏 v-show条件渲染 v-if动态属性绑定 v-bind 简写:遍历数组或对象 v-for双向数据绑定 v-model渲染数据 v-text 和 v-html计算属性 computed侦听器 watch自动侦听器 watchEffect 本文示例…...

【OpenSearch】安装部署OpenSearch和OpenSearch-Dashboard
一、安装OpenSearch 1.禁用主机swap提高性能 sudo swapoff -a2.增加OpenSearch可用的内存映射数量。 编辑sysctl配置文件 sudo vi /etc/sysctl.conf在文件中添加一行来定义所需的值, 或者如果键存在,则更改值,然后保存您的更改。 vm.max…...

【系统架构设计师】2023年真题论文: 论软件可靠性评价的设计与实现(包括和素材和论文)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2023年 试题3)论文素材参考论文参考摘要正文总结真题题目(2023年 试题3) 软件可靠性评价是利用可靠性数学模型、统计技术等,对软件失效数据进行处理,评估和预测软件可靠性的过程,包括选择模型、收集数…...

教程:使用 InterBase Express 访问数据库(二)
1. 添加数据模块(IBX 通用教程) 本节将创建一个数据模块(TDataModule),这是一种包含应用程序使用的非可视组件的表单。 以下是完全配置好的 TDataModule 的视图: 创建 TDataModule 后,您可以在其他表单中使用这个数据模块。 2. 添加 TDataModule 要将数据模块添加到…...

Windows密码的网络认证---基于挑战响应认证的NTLM协议
一,网络认证NTLM协议简介 在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的,只能是点对点进行信息的传输。 举个例子就是,主机A想要访问主机B上的资源,…...

fpga 常量无法改变
parameter LED_ON_PERIOD0 n0*CLOCK_FREQ; parameter LED_OFF_PERIOD0 (2-n0)*CLOCK_FREQ;这种代码的变量不会无法内部修改 需要改成reg形式并在这种逻辑里面修改变量 always (posedge clk_ref or negedge sys_rst_n) begin虽然是并行逻辑 但是变量尽量还是先赋值从硬件上并…...

【HarmonyOS NEXT】如何给未知类型对象定义类型并使用递归打印所有的Key
关键词:嵌套对象、类型、递归、未知类型 目录 使用 Record 与 ESObject 定义未知对象类型 递归打印未知类型对象的key 在鸿蒙应用开发中,所有的数据都必须定义类型,且不存在 any 类型,那么我们当遇到 key 值可能随时变化的情况…...

RuoYi 样例框架运行步骤(测试项目自用,同学可自取)
目录 后台 API 运行导入,下载包端口号mysql 准备运行 PC(电脑端)运行安装 nodejs安装 yarn 及其依赖,启动服务登录admin(admin123) 或 ry(admin123) App(移动)运行下载 HBuilderX运行app运行注意࿱…...

Java进程CPU飙高排查
一、首先通过top指令查看当前占用CPU较高的进程pid 二、查看当前进程消耗资源的线程PID: top -Hp pid 使用 top -Hp <pid> 命令(pid为Java进程的id号)查看该Java进程内所有线程的资源占用情况。 三、通过print命令将线程pid转为16进…...

conda的对应环境下安装cuda11.0和对应的cudnn
在 Conda 环境中安装 CUDA 11.0 和对应的 cuDNN,可以按照以下步骤进行: 一. 环境配置 1. 创建 Conda 环境 首先,创建一个新的 Conda 环境(可选): conda create -n myenv python3.8 conda activate myen…...

微服务透传日志traceId
问题 在微服务架构中,一次业务执行完可能需要跨多个服务,这个时候,我们想看到业务完整的日志信息,就要从各个服务中获取,即便是使用了ELK把日志收集到一起,但如果不做处理,也是无法完整把一次业…...

【自然语言处理与大模型】大模型(LLM)基础知识②
(1)LLaMA输入句子的长度理论上可以无限长吗? 理论上来说,LLM大模型可以处理任意长度的输入句子,但实际上存在一些限制。下面是一些需要考虑的因素: 1. 计算资源:生成长句子需要更多的计算资源&a…...

新能源汽车的未来:车载电源与V2G技术的前景
近年来,新能源汽车在全球市场上发展迅速,尤其是在中国,新能源汽车的月销量已经超过了燃油车。随着新能源技术的不断发展,新能源汽车不仅仅是作为出行工具,而逐渐成为“移动能源站”。本文将探讨电动汽车的车载外放电功…...

Git 本地操作(2)
会以下操作就可以完成本地的版本控制了,就不需要再复制文件每次改一个东西就复制整个工程保存下来啦! 建议先看上一篇文章噢 !!! 一、新建项目git本地操作 1、初始化仓库 创建一个 project 文件夹,将需…...

项目管理软件:5款甘特图工具测评
在项目管理中,甘特图作为一种直观且高效的任务进度展示工具,被广泛应用于各个行业。以下是几款功能强大、易于使用的甘特图工具,它们能够帮助项目经理更好地规划、跟踪和管理项目进度。 1、进度猫 进度猫是国内项目管理新秀,是…...

Unreal5从入门到精通之如何在指定的显示器上运行UE程序
前言 我们有一个设备,是一个带双显示器的机柜,主显示器是一个小竖屏,可以触屏操作,大显示器是一个普通的横屏显示器。我们用这个机柜的原因就是可以摆脱鼠标和键盘,直接使用触屏操作,又可以在大屏观看,非常适合用于教学。 然后我们为这款机柜做了很多个VR项目,包括Uni…...

【Spring MVC】DispatcherServlet 请求处理流程
一、 请求处理 Spring MVC 是 Spring 框架的一部分,用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、**视图(View)和控制器&#x…...

【优选算法】——二分查找!
目录 1、二分查找 2、在排序数组中查找元素的第一个和最后一个位置 3、搜索插入位置 4、x的平方根 5、山脉数组的封顶索引 6、寻找峰值 7、寻找旋转排序数组中的最小值 8、点名 9、完结散花 1、二分查找 给定一个 n 个元素有序的(升序)整型数组…...

leetcode hot100【LeetCode 300. 最长递增子序列】java实现
LeetCode 300. 最长递增子序列 题目描述 给定一个未排序的整数数组 nums,找出其中最长递增子序列的长度。 要求: 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如࿰…...

sql注入——靶场Less1
?id1 ?id99union select 1,2,3-- 查看占位 ?id1 order by 3-- 尝试出表有几列 ?id1 order by 4-- 说明只有三列 ?id99 union select 1,database(),3-- 查询当前使用的数据库的名称 ?id99 union select 1,group_concat(table_name),3 from information_schema.tables …...

docker file容器化部署Jenkins(一)
Jenkins Github地址:https://github.com/jenkinsci/jenkins 国内镜像地址:https://docker.aityp.com/ 准备工作 # 创建持久化卷目录 mkdir /data/jenkins_home/Jenkins拉取镜像 # 由于Jenkins需要JDK,所以直接拉取带有JDK的Jenkins镜像 doc…...

ArkTS组件继承的高级用法
在HarmonyOS应用开发中,ArkTS作为开发语言,组件的继承是实现代码复用和扩展功能的重要机制。本文将详细介绍ArkTS中组件继承的高级用法,包括继承的概念、如何使用继承、以及继承在实际开发中的应用和最佳实践。 继承的概念 继承是面向对象编…...

第十二章 spring Boot+shiro权限管理
学习目标 引入依赖配置Shiro设计数据库表编写Mapper、Service和Controller前端页面测试与调优其他注意事项 Spring Boot与Shiro的集成是一种常见的Java Web应用程序权限管理解决方案。Shiro是一个强大的Java安全框架,提供了认证、授权、会话管理、加密等安全功能。以…...

jmeter基础01-3_环境准备-Linux系统安装jdk
Step1. 查看系统类型 打开终端,命令行输入uname -a,显示所有系统信息,包括内核名称、主机名、内核版本等。 如果输出是x86_64,则系统为64位。如果输出是i686 或i386,则系统为32位。 Step2. 官网下载安装包 https://www…...

数字证书的简单记录
CA(Certificate Authority):即数字证书颁发认证机构。 CA数字证书(crt/cer证书):数字证书 申请者与颁发者信息申请者公钥颁发者签名,由CA机构使用私钥签名得到数字证书。 CA中间证书࿱…...

ssm基于SSM的校内信息服务发布系统的设计与实现+vue
系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 摘要 1 Abstract 1 目 录 2 1绪论 4 1.1研究背景与意义 4 1.2国内外研究现状 4 1.3研究…...

Java 教程简介
Java 教程简介 Java 是 Sun Microsystems 公司于 1995 年 5 月推出的一种面向对象的编程语言和运行平台,由 James Gosling 和他的同事共同研发。当前,这个产品已被 Oracle 公司所收购。这篇教程将带你了解 Java 的一些基础知识和应用。 Java 系统简介 …...