计算机网络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等具备强…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
