关于WebSocket

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 连接时使用加密传输,可以确保数据在传输过程中被加密,并防止第三方窃听或篡改数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…

「Java开发指南」如何使用Spring注释器实现Spring控制器?(二)

本教程将引导您使用Spring Annotator实现Spring控制器,标准Java类被添加到搭建项目中,Spring Annotator Spring启用Java类。 虽然本教程的重点是Spring控制器,但是Spring Annotator也可以用于Spring服务、组件和存储库。在本教程中&#xff…

吴恩达机器学习作业ex5:正则化线性回归和偏差VS方差(Python实现)详细注释

文章目录 1.正则化线性回归1.1 可视化数据集1.2 正则化线性回归成本函数1.3 正则化线性回归梯度1.4 拟合线性回归 2 偏差-方差2.1 学习曲线 3.多项式回归3.1 学习多项式回归3.2 正则化参数的调整3.3 使用交叉验证集选择 λ3.4 计算测试集误差 1.正则化线性回归 在练习的前半部…

探索 JQuery EasyUI:构建简单易用的前端页面

介绍 当我们站在网页开发的浩瀚世界中,眼花缭乱的选择让我们难以抉择。而就在这纷繁复杂的技术海洋中,JQuery EasyUI 如一位指路明灯,为我们提供了一条清晰的航线。 1.1 什么是 JQuery EasyUI? JQuery EasyUI,简单来…

Xilinx FPGA:vivado实现串口的接收端

补充一些串口里用到的数值的相关知识点 接收端串口时序图: 程序设计: timescale 1ns / 1ps /串口接收端 串行转并行 module uart_rx(input sys_clk ,input rst_n ,input rx_data , //输入…

导出excel带图片

文章目录 前言一、根据图片路径转为图片总结 前言 列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种 如何处理图片就是重点 一、根据图片路径转为图片 废话不多说,直接上代码 书接上文: 通用导出 // 多个sheetfor (Sheet sheet : writer.getSheets()) {// 循环每一条数据…

构建网络图 (JavaScript)

前序:在工作中难免有一些千奇百怪的需求,如果你遇到构建网络图,或者学习应对未来,请看这边文章,本文以代码为主。 网络图是数据可视化中实用而有效的工具,特别适用于说明复杂系统内的关系和连接。这些图表…

等保1.0与2.0:物理环境安全的演进之路

在信息安全的大厦中,物理环境安全是那坚实的基础,承载着整个信息系统的稳定与安全。随着时间的推移,我国的信息安全等级保护标准也在不断地进化与完善,从等保1.0到等保2.0,不仅仅是数字上的递增,更是对物理…

【黑龙江哪些行业需要做等保?】

黑龙江等保测评是衡量企业网络安全水平的一项主要指标,包括:金融,能源,电信,医疗,教育,交通,制造,电商等。 等保测评是黑龙江省信息化建设的重要组成部分,也…

Qt篇——获取Windows系统上插入的串口设备的物理序号

先右键【此电脑-管理- 设备管理器-端口(COM和LPT)】中找到我们插入的某个设备的物理序号,如下图红色矩形框出的信息,这个就是已插入设备的物理序号(就是插在哪个USB口的意思)。 在Linux下我们可以通过往/et…

linux下安装kkFileView4

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 安装kkFileView前需要安装LibreOffic…

螺栓常用的防松方法

螺栓防松原理可以分为三种:摩擦防松、机械防松和永久防松。摩擦防松与机械防松为可拆卸防松,而永久防松为不可拆卸防松。 永久防松平常接触较少,这里只简单介绍一下常用的永久防松方法有:点焊、铆接、粘合等。这些方法在拆卸时大多要破坏螺纹紧固件&…

SAP ERP公有云(全称 SAP S/4HANA Cloud Public Edition),赋能企业成为智能可持续的企业

在数字化浪潮中,每一家企业都需要应对快速的市场变化,不断追求降本增效,为创新提供资源,发展新的业务模式,安全无忧地完成关键任务系统的转型。 10年前,SAP进入云领域,用云ERP和覆盖全线业务的云…

【C++题解】1714. 输出满足条件的整数4

问题:1714. 输出满足条件的整数4 类型&#xff1a;简单循环 题目描述&#xff1a; 输出 1∼n 中含有数字 3 或者含有数字 5 &#xff0c;且因数有 2 &#xff08;即能被 2 整除&#xff09;的所有整数。&#xff08;n<1000&#xff09; 输入&#xff1a; 从键盘输入一个…

使用深度远程启动管理器配置BMC DHCP管理地址的方法

目录 1.请确保服务器BMC是DHCP状态&#xff0c;才可以使用深度工具分配地址&#xff1b;若BMC配置过静态地址&#xff0c;请使用静态地址登录&#xff1b; 2.配置好自己笔记本的 ip&#xff08;例如&#xff1a;192.168.78.1&#xff09;&#xff0c;用网线与 ipmi 独立管理口…

结构冒险,控制冒险,数据冒险实例分析

目录 1.结构冒险&#xff1a; 2.数据冒险&#xff1a; 3.控制冒险&#xff1a; 指令执行过程&#xff1a; 取指(IF)&#xff1a;从指令存储器或 Cache 中取指令。 译码/读寄存器(ID)&#xff1a;操作控制器对指令进行译码&#xff0c;同时从寄存器堆中取操作数。 执行/计算地…

获取个人免费版Ubuntu Pro

首先上官网地址&#xff1a;Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”&#xff0c;在此页面中Ubuntu说明了该版本只面向个人开发者&#xff0c;且最终只允许5台设备免费使用&#xff1b;因而部署设备的抉择就不得不慎重考虑了&am…

39 - 安全技术与防火墙

39、安全技术和防火墙 一、安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督。不主动介入&#xff0c;默默看着你&#xff08;监控&#xff09;。 入侵防御系统&#xff1a;透明模式工作&#xff0c;数据包&#xff0c;网络监控…

Linux常见操作问题

1、登录刚创建的用户&#xff0c;无法操作。 注&#xff1a;etc/passwd文件是Linux操作系统中存储用户账户信息的文本文件&#xff0c;包含了系统中所有用户的基本信息&#xff0c;比如用户名、用户ID、用户组ID、用户家目录路径。 注&#xff1a;etc: 这个目录存放所有的系统…

Linux 命令:iftop

1. 写在前面 本文主要介绍 Linux iftop&#xff08;Interface TOP&#xff09; 命令&#xff1a;iftop 是一款小巧、免费且功能强大的网卡实时流量监控工具。监控指定网卡的实时流量、端口连接信息、反向解析 IP 等&#xff0c;还可以精确显示本机网络流量及网络内各主机和本机…