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

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是一种新型的网络协议&#xff0c;它能够在客户端和服务器之间建立实时的双向通信通道&#xff0c;使得浏览器和服务器之间的数据传输更加高效、快速和可靠。相比传统的HTTP协议&#xff0c;WebSocket协议使用更少的网络开销&#xf…...

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消息队列中间件简介消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性[架构] 使用较多的消息队列有 ActiveMQ(安全)&#x…...

Java源码规则引擎:jvs-rules决策流的自定义权限控制

规则引擎用于管理和执行业务规则。它提供了一个中央化的机制来定义、管理和执行业务规则&#xff0c;以便根据特定条件自动化决策和行为。规则引擎的核心概念是规则。规则由条件和动作组成。条件定义了规则适用的特定情况或规则触发的条件&#xff0c;而动作定义了规则满足时要…...

Python-字符串的世界

Python字符串的世界 在Python编程中&#xff0c;字符串&#xff08;String&#xff09;是一种非常重要的数据类型&#xff0c;用于表示文本信息。字符串可以包含字母、数字、特殊字符以及空格&#xff0c;它们在编程中被广泛用于文本处理、格式化输出、字符串匹配等各种场景。…...

使用上 Spring 的事件机制

本文主要是简单的讲述了Spring的事件机制&#xff0c;基本概念&#xff0c;讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制&#xff0c;应用的场景&#xff0c;搭配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单片机实现对蜂鸣器振动频率的调节&#xff0c;基于PWM控制系统通过代码实现控制。 三.电路图 四.代码 //main.uno #define Buzzer 2int PotBuffer …...

redis入门2-命令

Redis的基本数据类型 redis的基本数据类型&#xff08;value&#xff09;: string,普通字符串 hash&#xff08;哈希&#xff09;,适合存储对象 list(列表),按照插入顺序排序&#xff0c;可以由重复的元素 set(无序集合)&#xff0c;没有重复的元素 sorted set(有序集合)&…...

Typescript 枚举类型

枚举是用来表示一组明确的可选值列表 // enum是枚举类型的关键字 //枚举如果不设置值&#xff0c;默认从0开始 enum Direction {Up, // 0 Down, // 1 Left, // 2Right // 3} //如果给第一个值赋值为100&#xff0c;则第二、第三第四个都会在第一个的基础上1 分别是101,102…...

docker小记-容器中启动映射端口号但访问不到

在docker容器中是每一个容器隔离分开的。 每个容器视为一个独立的环境&#xff0c;当在外部环境访问不到的时候就是说明端口号还是没映射到。 之前使用的映射说白了就是将docker中的独立的ip地址端口号映射到主机的ip地址和端口号。这一步没有成功。 docker inspect 容器名 …...

Java中的Map常见使用案例代码

以下是一些Java中Map的常见使用案例和具体代码实现&#xff1a; Map的遍历 Map<String, Integer> map new HashMap<>(); map.put(“apple”, 10); map.put(“banana”, 20); map.put(“orange”, 30); // 遍历方式一&#xff1a;使用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年提出 测试结果为&#xff1a; 通过运行结果可以发现&#xff0c; 在眼疾筛查数据集iChallenge-PM上使用AlexNet&#xff0c;loss能有效下降&#xff0c; 经过5个epoch的训练&#xff0c;在验证集上的准确率可以达到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 提示&#xff1a; 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原理+配置

目录 一&#xff0c; 以太网二层交换机 二&#xff0c;三层架构&#xff1a; 三&#xff0c;VLAN配置思路 1.创建vlan 2.接口划入vlan 3.trunk干道 4.vlan间路由器 5.DHCP池塘配置 四&#xff0c;华为VLAN部分的接口模式讲解&#xff1a; 五&#xff0c;华为VLAN部分的…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...