计算机网络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等具备强…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
Docker、Wsl 打包迁移环境
电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...