关于WebSocket

news2024/11/23 6:53:46

WebSocket 与传统的 HTTP 协议对比

在实时通信领域,传统的 HTTP 协议存在以下一些问题:

  1. 频繁的请求和响应:每次通信都需要建立和关闭连接,带来额外的开销
  2. 高延迟:每次通信都需要经过多个网络层的传输,延迟较高。
  3. 单向通信:HTTP 是一种单向的请求/响应模式,客户端无法主动向服务器推送数据。

image.png

我们将从连接方式、数据传输方式、通信效率、数据格式、服务器推送和适用场景等方面,对比一下websocket与http的区别

特点WebSocketHTTP
连接方式持久连接,通过握手建立单个连接每次请求/响应建立新的连接
数据传输方式全双工通信,客户端和服务器可以同时发送和接收数据单向通信,客户端发送请求,服务器返回响应
通信效率低延迟,实时性强,数据传输效率高高延迟,每次请求都需要重新建立连接,数据传输效率较低
数据格式支持任意格式的数据,如文本、二进制数据等基于文本的格式,如HTML、JSON等
服务器推送服务器可以主动向客户端推送消息服务器无法主动向客户端推送消息,需要客户端主动发起请求
适用场景实时通信、聊天应用、多人协作、实时数据展示等场景请求/响应模式的数据交互、静态内容展示、数据查询等场景

实现一个简单的websocket

前端代码

先使用new WebSocket创建一个websocket实例,然后通过onopen事件与websocket服务器建立连接

// 创建WebSocket连接 const socket = new WebSocket('ws://localhost:8080'); // 建立连接事件 socket.onopen = function() { console.log('WebSocket连接已建立'); // 向服务器发送消息 socket.send('Hello, server!'); };

然后通过onmessage,oncloseonerror事件,分别监听服务器发来的消息,连接关闭,错误事件

// 监听接收到服务器消息的事件 socket.onmessage = function(event) {

const message = event.data;

console.log('接收到服务器消息:', message);

};

// 监听连接关闭事件

socket.onclose = function() {

console.log('WebSocket连接已关闭');

}; // 监听连接错误事件 socket.onerror = function(error) {

console.error('WebSocket连接错误:', error);

};

image.png


前端API:
方法描述
new WebSocket(url)创建一个 WebSocket 实例,指定要连接的 WebSocket 服务器的 URL。
ws.onopen当 WebSocket 连接成功建立时触发的事件。
ws.onmessage当接收到来自 WebSocket 服务器的消息时触发的事件。
ws.onerror当 WebSocket 发生错误时触发的事件。
ws.onclose当 WebSocket 连接关闭时触发的事件。
ws.send(data)向 WebSocket 服务器发送消息,可以是字符串、ArrayBuffer 或 Blob。
ws.close()关闭 WebSocket 连接。

webSocket的使用场景

WebSocket可以提供实时、双向、持久的通信能力,使得 Web 应用能够实现高效、实时的数据传输和即时通信。

它适用于各种需要实时数据交互和即时通信的场景,如实时聊天应用、在线多人游戏、实时数据更新、即时通知和提醒、实时协作和协同编辑等。

简述一下WebSocket的工作原理

  1. 建立握手:客户端发起WebSocket连接请求,包含一些特定的头部信息,例如Upgrade和Connection字段。服务器接收到请求后,如果支持WebSocket协议,会返回一个握手响应,其中包含状态码101 Switching Protocols和一些额外的头部信息。
  2. 建立连接:一旦握手成功,客户端和服务器之间建立了持久连接。这个连接是基于TCP协议的,使用WebSocket协议进行通信。
  3. 数据传输:一旦连接建立,客户端和服务器可以通过发送消息来进行双向通信。客户端和服务器可以发送文本数据或二进制数据。数据以数据帧的形式传输,帧中包含有效负载和一些控制信息。
  4. 关闭连接:当客户端或服务器决定关闭连接时,它们可以发送关闭帧来表示关闭连接。收到关闭帧的一方也会发送一个关闭帧作为确认,并且双方会协商关闭连接的过程。

websocket的兼容性情况

通过can i use网址我们可以知道,WebSocket 在现代的 Web 浏览器中具有广泛的兼容性,但在一些旧版本的浏览器中可能存在兼容性问题。

image.png

WebSocket的安全性

WebSocket 本身并不提供加密功能,它是一种基于 TCP 的协议,数据是以明文形式传输的。因此,如果在使用 WebSocket 时不进行任何加密措施,那么数据在传输过程中可能会被窃听、篡改或伪造。

为了保护 WebSocket 通信的安全性,推荐使用 SSL/TLS 协议对 WebSocket 连接进行加密。通过在建立 WebSocket 连接时使用加密传输,可以确保数据在传输过程中被加密,并防止第三方窃听或篡改数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1865848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【仿真】UR机器人手眼标定与实时视觉追踪(单目)

这段代码实现了一个机器人视觉引导系统,主要功能包括: 连接仿真环境,控制UR机器人。相机标定: 使用棋盘格图案进行相机内参标定通过移动机器人采集多组图像使用calibrateCamera函数计算相机内参 手眼标定: 采集机器人末端位姿和对应的棋盘格图像使用calibrateHandEye函数计算相…

外汇的基本面分析需要关注什么?

外汇基本面分析的核心在于关注可能影响单一货币供求及国家货币价值的经济、社会和地缘政治事件与趋势。但值得注意的是,这些事件和因素往往具有更广泛的影响力,不仅限于单一国家。它们可能是影响整个地区或国家集团的重要事件,甚至一些事件&a…

植物大战僵尸杂交版技巧大全(附下载攻略)

《植物大战僵尸杂交版》为策略游戏爱好者带来了全新的挑战和乐趣。如果你是新手玩家,可能会对游戏中的植物和僵尸感到困惑。以下是一些实用的技巧,帮助你快速掌握游戏并享受其中的乐趣。 技巧一:熟悉基本玩法 游戏的基本玩法与原版相似&…

大自然高清风景视频无水印素材在哪下载?下载视频素材网分享

在视频创作领域,一段高清的风景视频可以极大地提升你的作品质感。无论是作为背景、过渡片段还是主要内容,优质的风景视频素材都是必不可少的。然而,寻找既高清又无水印的风景视频素材并非易事。为了帮助大家轻松获取这类素材,我整…

七天速通javaSE:第四天 递归算法

文章目录 前言一、递归的介绍二、递归模型(n!)1 阶乘的定义:2. 阶乘的递归代码实现3. 递推与回归的内部逻辑三、练习 前言 本文将学习递归算法。在计算机科学中,递归算法是一种将问题不断分解 为同一类子问题来解决问题的方法。递…

网站推广如何做?这七个方法要知道

在出海独立站商家中,推广是必不可少的环节。在你完成网站的搭建,产品的上架,以及网站的运营和优化后,你就可以开始着手推广你的网站了。你的网站是承载你的品牌和产品的主要平台,因此,你需要根据你的品牌和…

Python+Vue+Springboot实现电脑端微信好友导入导出

主要实现思路是使用python的自动化库uiautomation进行客户端抓取联系人,vue做管理界面,springboot做后端服务。 截图如下 登录: 首页 好友导出 不足之处就是只有windows版本,mac上还不行 而且谷歌和edge浏览器的效果是最好的&a…

【C++】红黑树及其实现

目录 一、红黑树的定义1.为什么提出红黑树?2.红黑树的概念3.红黑树的性质 二、红黑树的实现1.红黑树的结构2.红黑树的插入2.1 uncle为红色2.2 uncle为黑色,且是grandfather的右孩子2.3 uncle为黑色,且是grandfather的左孩子 3.红黑树的验证 4…

PTL系统电子标签让工厂仓储出入库管理更高效

在现代工厂的运营中,仓储管理的效率直接影响着整个生产流程的顺畅与企业的竞争力。PTL 系统(Pick-to-Light)的应用,为工厂仓储的出入库管理带来了革命性的变化,使其更加高效、精准和智能化。 一、仓库安装使用PTL系统电…

TF-IDF、BM25传统算法总结

1. TF-IDF算法 F-IDF(词频-逆文档频率)是一种用于衡量文本中词语重要性的方法,特别适用于信息检索和文本挖掘任务。下面会拆分为两部分深入讲解TF-IDF的计算过程,以便更好地理解。 TF-IDF的计算过程可以分为两个主要部分&#xf…

2.移植freertos到stm32f103c8t6

目录 1.步骤 2.freertos配置时常见的选项卡意思 1.步骤 2.freertos配置时常见的选项卡意思

typescript学习回顾(三)

今天继续来分享ts的相关概念,枚举,ts模块化,接口和类型兼容性 ts的扩展类型:类型别名,枚举,接口和类 枚举 基础概念 枚举通常用于约束某个变量的取值范围。当然字面量和联合类型配合使用,也可…

动态规划——123. 买卖股票的最佳时机 III

目录 1、题目链接 2、题目分析 1.状态表示 2.状态转移方程 3.初始化 4.填表 5.返回值 3、代码解析 1、题目链接 123. 买卖股票的最佳时机 III 2、题目分析 1.状态表示 由题目可知,我们分为两种状态,买入和卖出,又因为只能完成两次交易…

如何从iPhone恢复错误删除的照片

嘿,iPhone 用户!作为一名苹果专业人士,我见过相当多的“哎呀,我删除了它!”的时刻。今天,我在这里指导您完成从iPhone中恢复那些珍贵的,错误删除的照片的迷宫。坐下来,拿起你的设备&…

【2020-2023】Transformer在小目标检测领域的应用与发展综述

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

std::enable_if和std::is_base_of

std::enable_if,其主要为了完成模板特偏化,有两个参数,第一个为布尔值类型,第二个如果布尔值为true,其为默认空值,如果已经赋值,则为对应的类型。 std::is_base_of,其一共存在两个参数&#xff…

windows10/win11截图快捷键 和 剪贴板历史记录 快捷键

后知后觉的我今天又学了两招: windows10/win11截图快捷键 按 Windows 徽标键‌ Shift S。 选择屏幕截图的区域时,桌面将变暗。 默认情况下,选择“矩形模式”。 可以通过在工具栏中选择以下选项之一来更改截图的形状:“矩形模式”…

【每日刷题】Day76

【每日刷题】Day76 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 561. 数组拆分 - 力扣(LeetCode) 2. 删除有序链表中重复的元素-II_牛客题霸…

多接口分线盒在工业自动化中的重要性与应用

简介 多接口分线盒是现代工业自动化中不可或缺的一个组成部分,它主要用于简化复杂的接线系统,提高效率和可靠性。本文将详细探讨多接口分线盒的定义、功能、以及在工业自动化中的应用情况。 无源多接口分线盒 多接口分线盒的定义与功能 多接口分线盒是…

vue draggable

一、安装&#xff1a; npm i -S vuedraggablenext 二、代码 <draggable :list"projectOptions" item-key"name" class"w-25" ghost-class"ghost"chosen-class"chosen" update"updateSort" animation"3…