当前位置: 首页 > news >正文

计算机网络WebSocket——针对实习面试

目录

  • 计算机网络WebSocket
    • 什么是WebSocket?
    • WebScoket和HTTP协议的区别是什么?
    • 说明WebSocket的优势和使用场景?
    • 说明WebSocket的建立连接的过程?

计算机网络WebSocket

在这里插入图片描述

什么是WebSocket?

WebSocket是一个网络通信协议,提供了一个全双工通信渠道,通过一个单一的长期连接允许服务器主动向客户端发送数据。以下是关于WebSocket的一些关键点:

  1. 全双工通信

    • WebSocket允许服务器和客户端之间进行双向实时通信,即双方可以在任何时刻发送数据,不需要等待对方的请求或响应。
  2. 持久连接

    • 一旦WebSocket连接建立,它会保持开放状态,直到客户端或服务器决定关闭连接,这与HTTP的请求-响应模式不同,后者每次通信都需要建立新的连接。
  3. 低延迟

    • 由于连接是持久的,WebSocket减少了因建立连接而产生的延迟,这对于需要快速响应的应用(如在线游戏、实时聊天等)非常重要。
  4. 基于TCP

    • WebSocket在TCP之上运行,使用80端口(非加密)或443端口(加密,即wss://)。
  5. 数据格式

    • WebSocket可以传输文本和二进制数据,这使得它适用于各种类型的应用,包括那些需要传输大量数据的应用。
  6. 浏览器支持

    • 现代浏览器普遍支持WebSocket,使得开发者可以在客户端轻松实现WebSocket通信。
  7. 安全性

    • WebSocket Secure(wss://)提供了加密的WebSocket连接,类似于HTTPS,确保数据传输的安全。
  8. 适用场景

    • WebSocket适用于需要服务器实时推送数据到客户端的应用,如股票行情、实时通知、在线协作工具、网络游戏等。
  9. 握手过程

    • WebSocket连接的建立是通过一个HTTP请求完成的,这个请求包含了特定的头部信息,如Upgrade: websocket,服务器响应这个请求并完成握手后,HTTP连接就会升级为WebSocket连接。
  10. 事件和API

    • 在JavaScript中,WebSocket提供了onopenonmessageonerroronclose等事件,以及sendclose等方法,使得在客户端实现WebSocket通信变得简单。

WebSocket的出现,为开发实时、交互性强的网络应用提供了强大的支持。

WebScoket和HTTP协议的区别是什么?

WebSocket和HTTP协议在设计和用途上有几个主要的区别:

WebScoket和HTTP协议的区别关键字记忆

特性WebSocketHTTP
连接类型持久连接无状态连接
连接数量每个客户端一个持久连接多个请求/响应周期,每个周期一个连接
通信模式全双工通信请求/响应模式
性能低延迟,适用于实时应用延迟较高,适用于请求数据
头部开销无额外开销每个请求/响应都需要携带头部信息
适用场景实时通信,如聊天应用、游戏网页内容传输,文件下载
服务器推送支持不支持,除非使用长轮询或SSE
协议WebSocket协议(基于TCP)HTTP/1.1 或 HTTP/2
安全性支持WSS(WebSocket Secure)支持HTTPS
API复杂性相对简单,专注于实时通信复杂,支持多种方法(GET, POST, PUT, DELETE等)
浏览器兼容性现代浏览器普遍支持所有浏览器支持
控制权客户端和服务器都可以主动发送消息客户端发起请求,服务器响应

以下是对表格中各项特性的详细说明

  1. 连接类型

    • WebSocket:建立连接后,客户端和服务器之间可以保持一个持久的连接,这个连接可以用于双向数据传输,直到客户端或服务器决定关闭连接。
    • HTTP:每次HTTP通信都是无状态的,意味着每个请求都是独立的,服务器在处理完请求后就会关闭连接(除非使用持久连接,如HTTP/1.1中的keep-alive)。
  2. 连接数量

    • WebSocket:通常每个客户端与服务器之间只维持一个WebSocket连接
    • HTTP:在一次会话中,客户端可能需要多次与服务器建立连接,发送多个请求
  3. 通信模式

    • WebSocket:支持全双工通信,即客户端和服务器可以同时发送和接收数据,类似于电话通话。
    • HTTP:基于请求/响应模式,客户端发送请求,服务器响应请求。
  4. 性能

    • WebSocket:由于减少了连接建立和关闭的开销,WebSocket适用于需要快速、实时通信的应用。
    • HTTP:每个请求都需要建立连接(除非使用持久连接),因此延迟较高,不适合实时通信。
  5. 头部开销

    • WebSocket:一旦连接建立,后续通信不需要携带HTTP头部,减少了数据传输的开销。
    • HTTP:每个请求和响应都需要携带HTTP头部,增加了数据传输的开销。
  6. 适用场景

    • WebSocket:适用于需要实时数据传输的应用,如在线游戏、实时聊天应用、股票行情更新等。
    • HTTP:适用于传统的网页内容传输,文件下载,API调用等。
  7. 服务器推送

    • WebSocket:服务器可以随时向客户端推送数据,无需客户端请求。
    • HTTP:服务器不能主动向客户端推送数据,除非使用长轮询或服务器发送事件(SSE)。
  8. 协议

    • WebSocket:基于TCP协议,有专门的WebSocket协议规范。
    • HTTP:基于TCP协议,有HTTP/1.1和HTTP/2等不同的版本。
  9. 安全性

    • WebSocket:可以通过WSS(WebSocket Secure)实现加密通信。
    • HTTP:可以通过HTTPS实现加密通信。
  10. API复杂性

    • WebSocket:API相对简单,主要关注于建立连接和发送/接收消息。
    • HTTP:API更为复杂,支持多种HTTP方法(如GET, POST, PUT, DELETE等),以及状态码、头部字段等。
  11. 浏览器兼容性

    • WebSocket:现代浏览器普遍支持WebSocket。
    • HTTP:所有浏览器都支持HTTP。
  12. 控制权

    • WebSocket:客户端和服务器都可以控制通信,可以主动发送消息。
    • HTTP:控制权在客户端,客户端发起请求,服务器响应。

WebSocket和HTTP各有优势,适用于不同的应用场景。WebSocket适合需要持续、实时通信的应用,而HTTP适合于传统的请求/响应模式的应用。

说明WebSocket的优势和使用场景?

WebSocket的优势:

  1. 实时性

    • WebSocket提供了全双工通信,允许服务器实时向客户端推送数据,这对于需要即时更新的应用非常关键。
  2. 持久连接

    • 与HTTP不同,WebSocket建立了一个持久的连接,不需要每次通信都重新建立连接,这减少了延迟和网络开销。
  3. 减少服务器负载

    • 由于WebSocket连接是持久的,它减少了服务器处理频繁HTTP请求的负载。
  4. 减少数据传输

    • WebSocket在建立连接后,后续通信不需要携带HTTP头部信息,这减少了数据传输量。
  5. 双向通信

    • WebSocket支持客户端和服务器之间的双向通信,这使得交互更加灵活。
  6. 跨域通信

    • WebSocket支持跨域通信,这使得在不同域之间进行实时通信成为可能。
  7. 更好的用户体验

    • 对于需要快速响应的应用,WebSocket可以提供更流畅和响应更快的用户体验。
  8. 安全性

    • 通过wss://(WebSocket Secure),WebSocket提供了加密的通信,确保数据传输的安全性。

WebSocket的使用场景:

  1. 在线聊天应用

    • 需要实时消息传递的聊天应用,如WhatsApp、微信等。
  2. 实时通知和消息推送

    • 邮件、社交媒体通知、新闻更新等。
  3. 股票交易平台

    • 需要实时更新股票价格和市场数据的平台。
  4. 在线游戏

    • 多人在线游戏需要实时通信来同步玩家状态。
  5. 协作工具

    • 如Google Docs等实时协作编辑文档的工具。
  6. 实时数据监控

    • 监控系统状态、性能指标等,如服务器监控、网络监控等。
  7. 物联网(IoT)

    • 连接和控制物联网设备,如智能家居设备。
  8. 视频流和音频流

    • 虽然通常使用更专业的协议,但WebSocket也可以用于低延迟的流媒体传输。
  9. 远程桌面和VPN

    • 提供远程访问和控制桌面或网络的能力。
  10. 多用户实时应用

    • 任何需要多个用户实时交互的应用,如在线课堂、会议系统等。

说明WebSocket的建立连接的过程?

WebSocket的建立连接过程涉及一个握手阶段,这个过程将一个普通的HTTP连接升级为WebSocket连接。以下是详细的步骤:

  1. 客户端发起握手请求

    • 客户端(通常是浏览器)向服务器发送一个HTTP请求,这个请求看起来像普通的HTTP请求,但包含了一些特殊的头部信息,以表明这是一个WebSocket握手请求。
    • 这个请求包含以下特殊的HTTP头部字段:
      • Upgrade: websocket:表明这是一个升级请求。
      • Connection: Upgrade:表明连接需要升级。
      • Host:请求的服务器地址。
      • Origin:请求的源地址(如果跨域)。
      • Sec-WebSocket-Key:一个Base64编码的随机值,用于握手过程中的安全性验证。
      • Sec-WebSocket-Version:WebSocket协议的版本号。
  2. 服务器响应握手请求

    • 服务器接收到请求后,检查请求头部,确认这是一个WebSocket握手请求。
    • 如果服务器同意升级连接,它会发送一个HTTP响应,包含以下头部字段:
      • Upgrade: websocket:确认升级。
      • Connection: Upgrade:确认连接升级。
      • Sec-WebSocket-Accept:服务器对客户端Sec-WebSocket-Key的响应,是一个经过特定算法处理的值,用于验证握手的安全性。
  3. 客户端验证响应

    • 客户端接收到服务器的响应后,会验证Sec-WebSocket-Accept值是否正确。这是通过将Sec-WebSocket-Key值与一个特定的GUID字符串组合,然后进行SHA-1散列和Base64编码得到的。
  4. 连接建立

    • 如果验证通过,客户端会关闭HTTP连接,并打开一个WebSocket连接
    • 此时,客户端和服务器之间的连接已经升级为WebSocket连接,可以开始全双工通信。
  5. 通信

    • 一旦WebSocket连接建立,客户端和服务器就可以通过这个连接发送和接收数据帧,直到连接被关闭。
  6. 关闭连接

    • 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) {// 如果元素已经在哈希表中&#xff0c;增加其…...

如何用GPT-4o解读视频

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

[ACTF2020]Upload 1--详细解析

信息收集 题目告诉我们是一道upload&#xff0c;也就是文件上传漏洞题目。 进入界面&#xff0c;是一个灯泡&#xff0c;将鼠标放在图标上就会出现文件上传的相应位置&#xff1a; 思路 文件上传漏洞&#xff0c;先看看有没有前端校验。 在js源码中找到了前端校验&#xff…...

【微软:多模态基础模型】(3)视觉生成

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

整合Druid

添加依赖 配置数据源信息...

基于Python空气质量可视化及预测

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

第1章-PostgreSQL(PG)介绍

第1章-PostgreSQL&#xff08;PG&#xff09;介绍 1、简介2、排名3、发展4、应用5、优势6、对比 1、简介 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;是以加州大学计算机系开发的POSTGRES&#xff0c;4.2版…...

moduo之阻塞队列BlockingQueue和BoundedBlockingQueue

简介 moduo中的队列与java线程池中的队列类似&#xff0c; 有无界阻塞队列和有界阻塞队列 结构 #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的重要性 随着人工智能和深度学习技术的快速发展&#xff0c;大规模预训练模型&#xff08;Large Pre-trained Models&#xff0c;简称大模型&#xff09;在自然语言处理、计算机视觉等领域取得了显著的效果。大模型如GPT-4、BERT、T5和DALL-E等具备强…...

业务系统对接大模型的基础方案:架构设计与关键步骤

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

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...