html5:webSocket 基础使用
一、理解 HTML5 WebSocket
HTML5 WebSocket是一种新型的网络协议,它能够在客户端和服务器之间建立实时的双向通信通道,使得浏览器和服务器之间的数据传输更加高效、快速和可靠。相比传统的HTTP协议,WebSocket协议使用更少的网络开销,能够实现较小的数据包传输和更低的延迟,能够支持实时数据更新的场景。
HTML5 WebSocket的使用方式比较简单,可以通过JavaScript中的WebSocket对象来创建WebSocket连接,并通过send()方法向服务器发送数据,通过onmessage()方法接收服务器返回的数据。目前,WebSocket协议已经广泛应用于实时聊天、在线游戏、语音视频聊天、股票行情等领域。
二、WebSocket协议的特点
1、支持双向通信:WebSocket协议允许客户端和服务器之间实时、双向的通信,无需像HTTP协议那样需要发送请求来获取数据。
2、更少的网络开销:WebSocket协议使用更少的网络开销,能够实现较小的数据包传输和更低的延迟。
3、长连接:WebSocket协议使用长连接,不需要频繁地建立和关闭连接,减少了传输数据的延迟时间。
4、跨域访问:WebSocket协议支持跨域访问,允许浏览器和服务器之间跨域实现实时通信。
5、WebSocket 是一个独立的协议,不同于 HTTP,但是在使用时可以通过 HTTP 来建立连接;6、WebSocket 的协议标识符是 "ws" 或 "wss",分别对应于普通的 WebSocket 和基于 SSL 的 WebSocket;
7、WebSocket 支持带有握手的协议,类似于 HTTP/1.1 的 Upgrade 和 Connection 头;
8、WebSocket 是一个双向数据传输的协议,也就是说服务器和客户端都可以主动发送数据;9、9、WebSocket 使用的是 TCP 协议,在传输层上可靠性较高。
三、WebSocket 常用属性
1、WebSocket.readyState:只读属性,表示 WebSocket 连接的当前状态。它的值可以是以下四个常量之一:
WebSocket.CONNECTING (0):表示正在建立连接。
WebSocket.OPEN (1):表示连接已经建立成功。
WebSocket.CLOSING (2):表示连接正在关闭。
WebSocket.CLOSED (3):表示连接已经关闭或者没有建立成功。
2、WebSocket.bufferedAmount:只读属性,表示还没有被发送到服务器的字节数。当调用 send() 方法发送数据时,数据会被放入发送缓存区中,直到被实际发送出去。这个属性可以用来检查发送缓存区中是否还有待发送的数据。
3、WebSocket.extensions:只读属性,表示服务器选择的 WebSocket 扩展列表。WebSocket 扩展是一种标准化的协议扩展,可以提供额外的功能和性能优化。
4、WebSocket.protocol:只读属性,表示服务器选择的子协议名称。子协议是一种应用层协议扩展,可以在 WebSocket 连接中定义一组特定的数据格式或行为。
5、WebSocket.url:只读属性,表示 WebSocket 对象连接的 URL 地址。该属性包含了协议、主机名、端口号和资源路径等信息。
四、WebSocket 生命周期 四个阶段
1、连接建立阶段:WebSocket 对象创建后,需要连接 WebSocket 服务器,完成握手协议。在这个阶段,WebSocket 对象会触发 open 事件,表示连接已经建立成功。
2、数据传输阶段:连接建立成功后,可以通过 WebSocket 对象进行双向数据传输。在这个阶段,WebSocket 对象会触发 message 事件,表示收到了来自服务器的数据,也可以使用 send() 方法向服务器发送数据。
3、关闭连接阶段:当通信结束,或者出现异常情况时,需要关闭 WebSocket 连接。在这个阶段,WebSocket 对象会触发 close 事件,表示连接已经关闭。
4、异常处理阶段:在进行 WebSocket 通信时,有可能出现网络故障、服务端异常等问题。在这些异常情况下,WebSocket 对象会触发 error 事件,表示出现了错误。
需要注意的是,WebSocket 生命周期的第一个阶段是必须的,而后面三个阶段则是可选的,取决于实际的业务需求和网络情况。例如,在某些情况下,WebSocket 连接可能会一直保持打开状态,直到用户手动关闭或者网络中断。
五、HTML5 WebSocket 接收的参数
1、URL:要连接的 WebSocket 服务器的 URL。
2、Protocols(可选):一个可选的协议字符串或协议数组,表示与服务器通信时使用的协议。如果不指定,则可以使用任何协议。
3、Options(可选):一些可选的配置参数,用于控制 WebSocket 连接的行为,如超时、缓冲区大小等。这些选项通常与底层的操作系统或浏览器实现有关。
例如,以下代码演示了如何创建一个 WebSocket 对象:
var socket = new WebSocket("ws://localhost:8080", ["protocol1", "protocol2"], {timeout: 5000});
其中,第一个参数是 URL,表示要连接的 WebSocket 服务器的地址和端口号;第二个参数是一个可选的协议字符串或协议数组,表示与服务器通信时使用的协议;第三个参数是一个可选的选项对象,包含一些可配置的参数,例如超时时间等。
六、使用 HTML5 WebSocket 的过程
1、在 Web 应用程序中创建 WebSocket 对象,指定连接的 URL;
2、建立连接后,可以发送数据给服务器端,服务器端也可以发送数据给客户端;
3、连接一旦关闭,就不能再发送数据,需要重新创建 WebSocket 对象进行连接。
七、HTML5 WebSocket 需要后端配合吗
是的,
HTML5 WebSocket 需要后端配合。具体来说,WebSocket 需要在后端实现一个 WebSocket 服务器,该服务器能够接收 WebSocket 请求,并在客户端和服务器之间建立 WebSocket 连接。通常情况下,后端可以使用一些 WebSocket 服务器库(如 Node.js 的 Socket.IO 或 Java 的 Java-WebSocket)来实现 WebSocket 服务器。在客户端,HTML5 提供了 WebSocket API,让客户端能够与服务器建立 WebSocket 连接、发送和接收 WebSocket 消息。因此,HTML5 WebSocket 需要客户端和服务器的配合。
八、简单的 HTML5 WebSocket 实例
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>WebSocket Test</title>
</head>
<body>
<script>var socket = new WebSocket("ws://localhost:8080");// 连接成功时触发socket.onopen = function(event) {socket.send("Hello, Server!");};// 接收到消息时触发socket.onmessage = function(event) {console.log("Received data: " + event.data);};// 连接关闭时触发socket.onclose = function(event) {console.log("Connection closed.");};
</script>
</body>
</html>
在这个例子中,创建了一个 WebSocket 对象并指定了连接的 URL,接着设置了 onopen、onmessage 和 onclose 事件的回调函数来处理连接状态和接收数据。最后,使用 socket.send() 方法发送数据到服务器。
九、欢迎交流指正,关注我,一起学习
参考链接
滑动验证页面
https://www.cnblogs.com/web-learn/p/15148141.html
HTML5 WebSocket 详解及使用_html websocket_祖先森、的博客-CSDN博客
相关文章:
html5:webSocket 基础使用
一、理解 HTML5 WebSocket HTML5 WebSocket是一种新型的网络协议,它能够在客户端和服务器之间建立实时的双向通信通道,使得浏览器和服务器之间的数据传输更加高效、快速和可靠。相比传统的HTTP协议,WebSocket协议使用更少的网络开销…...
html学习10-----总结(完)
<!DOCTYPE html> <html><head><meta charset"utf-8"/><title>html总结</title></head><body><h1>HTML总结</h1><br/><h2>文本格式化</h2><hr/><p><b>粗体文本<…...
Spring使用P命名空间实现注入数值信息-----Spring框架
<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"x…...
windows环境下安装RabbitMQ
一、RabbitMq简介1.1消息队列中间件简介消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有 ActiveMQ(安全)&#x…...
Java源码规则引擎:jvs-rules决策流的自定义权限控制
规则引擎用于管理和执行业务规则。它提供了一个中央化的机制来定义、管理和执行业务规则,以便根据特定条件自动化决策和行为。规则引擎的核心概念是规则。规则由条件和动作组成。条件定义了规则适用的特定情况或规则触发的条件,而动作定义了规则满足时要…...
Python-字符串的世界
Python字符串的世界 在Python编程中,字符串(String)是一种非常重要的数据类型,用于表示文本信息。字符串可以包含字母、数字、特殊字符以及空格,它们在编程中被广泛用于文本处理、格式化输出、字符串匹配等各种场景。…...
使用上 Spring 的事件机制
本文主要是简单的讲述了Spring的事件机制,基本概念,讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制,应用的场景,搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …...
Linux安装QT
//进入qt安装包路径 cd qt安装包路径 //修改权限 sudo chmod x qt-opensource-linux-x64-5.14.2.run //运行qt安装包 sudo ./qt-opensource-linux-x64-5.14.2.run //安装编译器 sudo apt-get install gcc g //安装编译工具 sudo apt-get install build-essential //安装Op…...
如何用arduino uno主板播放自己想要的曲子。《我爱你中国》单片机版本。
目录 一.效果展示 二.基本原理 三.电路图 四.代码 一.效果展示 arduino播放《我爱你中国》 二.基本原理 利用arduino uno单片机实现对蜂鸣器振动频率的调节,基于PWM控制系统通过代码实现控制。 三.电路图 四.代码 //main.uno #define Buzzer 2int PotBuffer …...
redis入门2-命令
Redis的基本数据类型 redis的基本数据类型(value): string,普通字符串 hash(哈希),适合存储对象 list(列表),按照插入顺序排序,可以由重复的元素 set(无序集合),没有重复的元素 sorted set(有序集合)&…...
Typescript 枚举类型
枚举是用来表示一组明确的可选值列表 // enum是枚举类型的关键字 //枚举如果不设置值,默认从0开始 enum Direction {Up, // 0 Down, // 1 Left, // 2Right // 3} //如果给第一个值赋值为100,则第二、第三第四个都会在第一个的基础上1 分别是101,102…...
docker小记-容器中启动映射端口号但访问不到
在docker容器中是每一个容器隔离分开的。 每个容器视为一个独立的环境,当在外部环境访问不到的时候就是说明端口号还是没映射到。 之前使用的映射说白了就是将docker中的独立的ip地址端口号映射到主机的ip地址和端口号。这一步没有成功。 docker inspect 容器名 …...
Java中的Map常见使用案例代码
以下是一些Java中Map的常见使用案例和具体代码实现: Map的遍历 Map<String, Integer> map new HashMap<>(); map.put(“apple”, 10); map.put(“banana”, 20); map.put(“orange”, 30); // 遍历方式一:使用entrySet()方法遍历 for (M…...
计算机视觉实验:图像处理综合-路沿检测
目录 实验步骤与过程 1. 路沿检测方法设计 2. 路沿检测方法实现 2.1 视频图像提取 2.2 图像预处理 2.3 兴趣区域提取 2.4 边缘检测 2.5 Hough变换 2.6 线条过滤与图像输出 3. 路沿检测结果展示 4. 其他路沿检测方法 实验结论或体会 实…...
Linux环境下VS code的python与C++调试环境的安装
Linux环境下VS code的python与C调试环境的安装 文章目录 Linux环境下VS code的python与C调试环境的安装前言一、云服务器的环境二、VS code相关信息三、python 开发环境配置四、C开发环境配置1.测试main.cpp2.进行debug3.进行debug程序4.运行main.cpp程序步骤 前言 最近写的 C&…...
AlexNet卷积神经网络-笔记
AlexNet卷积神经网络-笔记 AlexNet卷积神经网络2012年提出 测试结果为: 通过运行结果可以发现, 在眼疾筛查数据集iChallenge-PM上使用AlexNet,loss能有效下降, 经过5个epoch的训练,在验证集上的准确率可以达到94%左右…...
剑指 Offer 53 - I. !!在排序数组中查找数字 I (考查二分法)
剑指 Offer 53 - I. 在排序数组中查找数字 I 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2 示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0 提示: 0 < nums.length < 105 -109 < nums[i] &l…...
RANSAC算法在Python中的实现与应用探索:线性拟合与平面拟合示例
第一部分:RANSAC算法与其应用 在我们的日常生活和多个领域中,如机器学习,计算机视觉,模式识别等,处理数据是一个非常重要的任务。尤其是当我们需要从嘈杂的数据中获取信息或拟合模型时。有时候,数据可能包含异常值或噪声,这可能会对我们的结果产生重大影响。为了解决这…...
PHP接口自动化测试框架实现
我们来看一个简单的PHP实现的超简单的接口。 ...//报名验证 private function apply_verify() {$raid $this->input->get_post(raid);$mid $this->input->get_post(mid);if (!$raid || !$mid) {$this->ret_json(10021, 参数错误);}$this->load->model(…...
VLAN原理+配置
目录 一, 以太网二层交换机 二,三层架构: 三,VLAN配置思路 1.创建vlan 2.接口划入vlan 3.trunk干道 4.vlan间路由器 5.DHCP池塘配置 四,华为VLAN部分的接口模式讲解: 五,华为VLAN部分的…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
全面解析各类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…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
