计算机网络WebSocket——针对实习面试
目录
- 计算机网络WebSocket
- 什么是WebSocket?
- WebScoket和HTTP协议的区别是什么?
- 说明WebSocket的优势和使用场景?
- 说明WebSocket的建立连接的过程?
计算机网络WebSocket
什么是WebSocket?
WebSocket是一个网络通信协议,提供了一个全双工通信渠道,通过一个单一的长期连接允许服务器主动向客户端发送数据。以下是关于WebSocket的一些关键点:
-
全双工通信:
- WebSocket允许服务器和客户端之间进行双向实时通信,即双方可以在任何时刻发送数据,不需要等待对方的请求或响应。
-
持久连接:
- 一旦WebSocket连接建立,它会保持开放状态,直到客户端或服务器决定关闭连接,这与HTTP的请求-响应模式不同,后者每次通信都需要建立新的连接。
-
低延迟:
- 由于连接是持久的,WebSocket减少了因建立连接而产生的延迟,这对于需要快速响应的应用(如在线游戏、实时聊天等)非常重要。
-
基于TCP:
- WebSocket在TCP之上运行,使用80端口(非加密)或443端口(加密,即wss://)。
-
数据格式:
- WebSocket可以传输文本和二进制数据,这使得它适用于各种类型的应用,包括那些需要传输大量数据的应用。
-
浏览器支持:
- 现代浏览器普遍支持WebSocket,使得开发者可以在客户端轻松实现WebSocket通信。
-
安全性:
- WebSocket Secure(wss://)提供了加密的WebSocket连接,类似于HTTPS,确保数据传输的安全。
-
适用场景:
- WebSocket适用于需要服务器实时推送数据到客户端的应用,如股票行情、实时通知、在线协作工具、网络游戏等。
-
握手过程:
- WebSocket连接的建立是通过一个HTTP请求完成的,这个请求包含了特定的头部信息,如
Upgrade: websocket
,服务器响应这个请求并完成握手后,HTTP连接就会升级为WebSocket连接。
- WebSocket连接的建立是通过一个HTTP请求完成的,这个请求包含了特定的头部信息,如
-
事件和API:
- 在JavaScript中,WebSocket提供了
onopen
、onmessage
、onerror
和onclose
等事件,以及send
和close
等方法,使得在客户端实现WebSocket通信变得简单。
- 在JavaScript中,WebSocket提供了
WebSocket的出现,为开发实时、交互性强的网络应用提供了强大的支持。
WebScoket和HTTP协议的区别是什么?
WebSocket和HTTP协议在设计和用途上有几个主要的区别:
WebScoket和HTTP协议的区别关键字记忆
特性 | WebSocket | HTTP |
---|---|---|
连接类型 | 持久连接 | 无状态连接 |
连接数量 | 每个客户端一个持久连接 | 多个请求/响应周期,每个周期一个连接 |
通信模式 | 全双工通信 | 请求/响应模式 |
性能 | 低延迟,适用于实时应用 | 延迟较高,适用于请求数据 |
头部开销 | 无额外开销 | 每个请求/响应都需要携带头部信息 |
适用场景 | 实时通信,如聊天应用、游戏 | 网页内容传输,文件下载 |
服务器推送 | 支持 | 不支持,除非使用长轮询或SSE |
协议 | WebSocket协议(基于TCP) | HTTP/1.1 或 HTTP/2 |
安全性 | 支持WSS(WebSocket Secure) | 支持HTTPS |
API复杂性 | 相对简单,专注于实时通信 | 复杂,支持多种方法(GET, POST, PUT, DELETE等) |
浏览器兼容性 | 现代浏览器普遍支持 | 所有浏览器支持 |
控制权 | 客户端和服务器都可以主动发送消息 | 客户端发起请求,服务器响应 |
以下是对表格中各项特性的详细说明:
-
连接类型:
- WebSocket:建立连接后,客户端和服务器之间可以保持一个持久的连接,这个连接可以用于双向数据传输,直到客户端或服务器决定关闭连接。
- HTTP:每次HTTP通信都是无状态的,意味着每个请求都是独立的,服务器在处理完请求后就会关闭连接(除非使用持久连接,如HTTP/1.1中的keep-alive)。
-
连接数量:
- WebSocket:通常每个客户端与服务器之间只维持一个WebSocket连接。
- HTTP:在一次会话中,客户端可能需要多次与服务器建立连接,发送多个请求。
-
通信模式:
- WebSocket:支持全双工通信,即客户端和服务器可以同时发送和接收数据,类似于电话通话。
- HTTP:基于请求/响应模式,客户端发送请求,服务器响应请求。
-
性能:
- WebSocket:由于减少了连接建立和关闭的开销,WebSocket适用于需要快速、实时通信的应用。
- HTTP:每个请求都需要建立连接(除非使用持久连接),因此延迟较高,不适合实时通信。
-
头部开销:
- WebSocket:一旦连接建立,后续通信不需要携带HTTP头部,减少了数据传输的开销。
- HTTP:每个请求和响应都需要携带HTTP头部,增加了数据传输的开销。
-
适用场景:
- WebSocket:适用于需要实时数据传输的应用,如在线游戏、实时聊天应用、股票行情更新等。
- HTTP:适用于传统的网页内容传输,文件下载,API调用等。
-
服务器推送:
- WebSocket:服务器可以随时向客户端推送数据,无需客户端请求。
- HTTP:服务器不能主动向客户端推送数据,除非使用长轮询或服务器发送事件(SSE)。
-
协议:
- WebSocket:基于TCP协议,有专门的WebSocket协议规范。
- HTTP:基于TCP协议,有HTTP/1.1和HTTP/2等不同的版本。
-
安全性:
- WebSocket:可以通过WSS(WebSocket Secure)实现加密通信。
- HTTP:可以通过HTTPS实现加密通信。
-
API复杂性:
- WebSocket:API相对简单,主要关注于建立连接和发送/接收消息。
- HTTP:API更为复杂,支持多种HTTP方法(如GET, POST, PUT, DELETE等),以及状态码、头部字段等。
-
浏览器兼容性:
- WebSocket:现代浏览器普遍支持WebSocket。
- HTTP:所有浏览器都支持HTTP。
-
控制权:
- WebSocket:客户端和服务器都可以控制通信,可以主动发送消息。
- HTTP:控制权在客户端,客户端发起请求,服务器响应。
WebSocket和HTTP各有优势,适用于不同的应用场景。WebSocket适合需要持续、实时通信的应用,而HTTP适合于传统的请求/响应模式的应用。
说明WebSocket的优势和使用场景?
WebSocket的优势:
-
实时性:
- WebSocket提供了全双工通信,允许服务器实时向客户端推送数据,这对于需要即时更新的应用非常关键。
-
持久连接:
- 与HTTP不同,WebSocket建立了一个持久的连接,不需要每次通信都重新建立连接,这减少了延迟和网络开销。
-
减少服务器负载:
- 由于WebSocket连接是持久的,它减少了服务器处理频繁HTTP请求的负载。
-
减少数据传输:
- WebSocket在建立连接后,后续通信不需要携带HTTP头部信息,这减少了数据传输量。
-
双向通信:
- WebSocket支持客户端和服务器之间的双向通信,这使得交互更加灵活。
-
跨域通信:
- WebSocket支持跨域通信,这使得在不同域之间进行实时通信成为可能。
-
更好的用户体验:
- 对于需要快速响应的应用,WebSocket可以提供更流畅和响应更快的用户体验。
-
安全性:
- 通过wss://(WebSocket Secure),WebSocket提供了加密的通信,确保数据传输的安全性。
WebSocket的使用场景:
-
在线聊天应用:
- 需要实时消息传递的聊天应用,如WhatsApp、微信等。
-
实时通知和消息推送:
- 邮件、社交媒体通知、新闻更新等。
-
股票交易平台:
- 需要实时更新股票价格和市场数据的平台。
-
在线游戏:
- 多人在线游戏需要实时通信来同步玩家状态。
-
协作工具:
- 如Google Docs等实时协作编辑文档的工具。
-
实时数据监控:
- 监控系统状态、性能指标等,如服务器监控、网络监控等。
-
物联网(IoT):
- 连接和控制物联网设备,如智能家居设备。
-
视频流和音频流:
- 虽然通常使用更专业的协议,但WebSocket也可以用于低延迟的流媒体传输。
-
远程桌面和VPN:
- 提供远程访问和控制桌面或网络的能力。
-
多用户实时应用:
- 任何需要多个用户实时交互的应用,如在线课堂、会议系统等。
说明WebSocket的建立连接的过程?
WebSocket的建立连接过程涉及一个握手阶段,这个过程将一个普通的HTTP连接升级为WebSocket连接。以下是详细的步骤:
-
客户端发起握手请求:
- 客户端(通常是浏览器)向服务器发送一个HTTP请求,这个请求看起来像普通的HTTP请求,但包含了一些特殊的头部信息,以表明这是一个WebSocket握手请求。
- 这个请求包含以下特殊的HTTP头部字段:
Upgrade: websocket
:表明这是一个升级请求。Connection: Upgrade
:表明连接需要升级。Host
:请求的服务器地址。Origin
:请求的源地址(如果跨域)。Sec-WebSocket-Key
:一个Base64编码的随机值,用于握手过程中的安全性验证。Sec-WebSocket-Version
:WebSocket协议的版本号。
-
服务器响应握手请求:
- 服务器接收到请求后,检查请求头部,确认这是一个WebSocket握手请求。
- 如果服务器同意升级连接,它会发送一个HTTP响应,包含以下头部字段:
Upgrade: websocket
:确认升级。Connection: Upgrade
:确认连接升级。Sec-WebSocket-Accept
:服务器对客户端Sec-WebSocket-Key
的响应,是一个经过特定算法处理的值,用于验证握手的安全性。
-
客户端验证响应:
- 客户端接收到服务器的响应后,会验证
Sec-WebSocket-Accept
值是否正确。这是通过将Sec-WebSocket-Key
值与一个特定的GUID字符串组合,然后进行SHA-1散列和Base64编码得到的。
- 客户端接收到服务器的响应后,会验证
-
连接建立:
- 如果验证通过,客户端会关闭HTTP连接,并打开一个WebSocket连接。
- 此时,客户端和服务器之间的连接已经升级为WebSocket连接,可以开始全双工通信。
-
通信:
- 一旦WebSocket连接建立,客户端和服务器就可以通过这个连接发送和接收数据帧,直到连接被关闭。
-
关闭连接:
- WebSocket连接可以通过发送一个关闭帧来关闭。客户端和服务器都可以发起关闭流程。
这个过程确保了WebSocket连接的安全性和可靠性,同时也允许服务器和客户端在建立连接之前进行必要的协商。
相关文章:

计算机网络WebSocket——针对实习面试
目录 计算机网络WebSocket什么是WebSocket?WebScoket和HTTP协议的区别是什么?说明WebSocket的优势和使用场景?说明WebSocket的建立连接的过程? 计算机网络WebSocket 什么是WebSocket? WebSocket是一个网络通信协议,提…...
请介绍一下Python的网络编程以及如何使用socket模块进行网络通信
1、请介绍一下Python的网络编程以及如何使用socket模块进行网络通信。 Python中的网络编程主要是通过socket模块实现的。Socket模块提供了基本的套接字接口,使得Python程序可以连接到网络上的其他设备或服务。下面是对Python网络编程和socket模块的基本介绍以及如何…...
【第三课】Rust变量与数据类型(二)
目录 前言 Vector HashMap 其他 前言 上一课介绍了rust的变量和常见的数据类型,走马观花的看了一下rust常见的变量和数据类型,这些都是rust的基本语法,整理出来只是起一个引子的效果,基本语法多练习才可以熟练。这一课继续介绍…...

vue使用List.reduce实现统计
需要对集合的某些元素的值进行计算时,可以在计算属性中使用forEach方法 1.语法:集合.reduce ( ( 定义阶段性累加后的结果 , 定义遍历的每一项 ) > 定义每一项求和逻辑执行后的返回结果 , 定义起始值 ) 2、简单使用场景:例如下面…...

Linux网络:HTTPS协议
Linux网络:HTTPS协议 加密方式对称加密非对称加密混合加密中间人攻击 证书数据签名CA认证 HTTPSSSL/TSLHTTPS 在HTTP协议中,所有的数据都采用明文的形式传输,这就会导致数据非常容易泄露,只要拿到HTTP报文,就可以窃取各…...
http常⻅请求头和响应头详细讲解(笔记)
http常⻅请求头状态码 简介:讲解http常⻅见的请求⽅方法和使⽤用 http1.0定义了了三种:GET: 向服务器器获取资源,⽐比如常⻅见的查询请求POST: 向服务器器提交数据⽽而发送的请求Head: 和get类似,返回的响应中没有具体的内容&am…...

【c++丨STL】list的使用
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…...

系统掌握大语言模型提示词 - 从理论到实践
以下是我目前的一些主要个人标签: 6 年多头部大厂软件开发经验;1 年多 AI 业务应用经验,拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI,已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…...
cocosCreator视频web模式播放踩坑解决
/*** 对外输出接口*/ export interface VideoPlayerManageInterface {//初始化视频播放器init(list: VideoPlayerManageInitListType[],options?: VideoPlayerManageInitOptionsType): Promise<void>;//播放视频play(url: string, currentTime?: number): Promise<v…...
c++头文件中 #ifndef的作用
避免文件重复处理、变量等重定义 //c1.hpp #ifndef C1_HPP #define C1_HPP int a 0; #endif // LFU_CACHE_HPP#include"c1.hpp" #ifndef C2_HPP #define C2_HPP int b1; #endif#include"c1.hpp" #include"c2.hpp" #include<iostream> in…...

Xcode 项目内 OC 混编 Python,调用 Python 函数,并获取返回值(基于 python 的 c函数库)
1:新建 Xcode 工程 2:工程添加 Python.framework 1597052861430.jpg 3:在当前工程下新建一个名字为 googleT 的 python 文件(googleT.py) 1597052584962.jpg 在 googleT.py 文件内写入一个测试 python 函数 def lgf_translate( str ):var1 Hello World!print (str var1)retu…...

每日计划-1117
1. 完成 169. 多数元素 class Solution { public:int majorityElement(vector<int>& nums) {// 使用哈希表来统计每个元素出现的次数unordered_map<int, int> countMap;int n nums.size();for (int num : nums) {// 如果元素已经在哈希表中,增加其…...

如何用GPT-4o解读视频
OpenAI在去年推出的GPT-4V已经支持了多模态识别,但一直仅限于图片输入,不支持视频。相比之下,Google的Gemini早已支持视频识别。最近,我司业务场景中出现了一个需要识别视频的需求,而我们只采购了GPT-4o模型。这就引发…...

[ACTF2020]Upload 1--详细解析
信息收集 题目告诉我们是一道upload,也就是文件上传漏洞题目。 进入界面,是一个灯泡,将鼠标放在图标上就会出现文件上传的相应位置: 思路 文件上传漏洞,先看看有没有前端校验。 在js源码中找到了前端校验ÿ…...

【微软:多模态基础模型】(3)视觉生成
欢迎关注【youcans的AGI学习笔记】原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微软:多模态基础模型】(3)视觉生成 【微…...

整合Druid
添加依赖 配置数据源信息...
基于Python空气质量可视化及预测
摘 要 随着社会的发展和工业化进程的加速,环境问题日益凸显,尤其是空气质量问题对人们的生活和健康产生了重大影响。为了更好地了解和预测空气质量,本文设计并实现了一个基于Python爬虫、Flask框架和ECharts的天气质量预测及可视化系统。该系统通过爬取网络上的空气质量数据…...

第1章-PostgreSQL(PG)介绍
第1章-PostgreSQL(PG)介绍 1、简介2、排名3、发展4、应用5、优势6、对比 1、简介 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版…...
moduo之阻塞队列BlockingQueue和BoundedBlockingQueue
简介 moduo中的队列与java线程池中的队列类似, 有无界阻塞队列和有界阻塞队列 结构 #mermaid-svg-Gf8nET825tZgzVRM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Gf8nET825tZgzVRM .error-icon{fill…...
大模型Tuning方法详解
1. 引言 大模型与Tuning的重要性 随着人工智能和深度学习技术的快速发展,大规模预训练模型(Large Pre-trained Models,简称大模型)在自然语言处理、计算机视觉等领域取得了显著的效果。大模型如GPT-4、BERT、T5和DALL-E等具备强…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...