计算机网络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等具备强…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
