当前位置: 首页 > 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等具备强…...

OpCore-Simplify:让黑苹果配置从复杂到简单的智能化革命

OpCore-Simplify&#xff1a;让黑苹果配置从复杂到简单的智能化革命 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾为黑苹果&#xff08;Hac…...

Image-to-Video镜像使用技巧:提示词怎么写?参数怎么调?

Image-to-Video镜像使用技巧&#xff1a;提示词怎么写&#xff1f;参数怎么调&#xff1f; 1. 快速上手Image-to-Video镜像 Image-to-Video图像转视频生成器是一款基于I2VGen-XL模型的实用工具&#xff0c;能够将静态图片转化为动态视频。这个由科哥二次开发的镜像已经预装了…...

EasyAnimateV5-7b-zh-InP在计算机网络教学视频生成中的应用

EasyAnimateV5-7b-zh-InP在计算机网络教学视频生成中的应用 1. 引言 计算机网络课程的教学一直面临着一个难题&#xff1a;如何将抽象的网络协议、拓扑结构和数据传输过程直观地展示给学生。传统的静态图片和文字描述往往难以让学生真正理解数据包是如何在网络中流动的&#…...

Vue 3 Teleport:打破 DOM 层级的“传送门”

Vue 3 Teleport&#xff1a;打破 DOM 层级的“传送门” 在现代前端开发中&#xff0c;组件化是构建复杂用户界面的基石。我们习惯于将 UI 拆分成一颗颗独立的组件&#xff0c;像搭积木一样组合成完整的页面。然而&#xff0c;这种嵌套结构在带来逻辑内聚性的同时&#xff0c;也…...

GSMA:运营商实践AI大模型赋能垂直行业标杆案例集 2025

这份《运营商实践 AI 大模型赋能垂直行业标杆案例集 2025》由 GSMA 发布&#xff0c;聚焦客户服务与运营创新、医疗健康与智慧教育、产业升级与智能制造、公共服务与社会治理四大领域&#xff0c;系统梳理了中国移动、中国电信、中国联通三大运营商携手生态伙伴&#xff0c;将 …...

MacBook Pro本地部署OpenClaw:百川2-13B量化模型7×24小时运行方案

MacBook Pro本地部署OpenClaw&#xff1a;百川2-13B量化模型724小时运行方案 1. 为什么选择MacBook Pro部署OpenClaw&#xff1f; 去年冬天&#xff0c;当我第一次尝试在MacBook Pro上部署量化版百川2-13B模型时&#xff0c;身边的朋友都觉得我疯了。"M1芯片能跑得动13B…...

Windows音频捕获新方案:实现进程级精准录音的技术实践

Windows音频捕获新方案&#xff1a;实现进程级精准录音的技术实践 【免费下载链接】win-capture-audio An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBSs game capture and Discords application stream…...

macOS风格光标主题:从视觉革新到交互未来的全面探索

macOS风格光标主题&#xff1a;从视觉革新到交互未来的全面探索 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 价值解析&#xff1a;重新定义数字交互的视觉语言 在当今多设备协同的…...

LaTeX排版踩坑记:用了soul包高亮,为什么一加\cite就报错?

LaTeX排版进阶&#xff1a;soul包高亮冲突的底层原理与系统化解决方案 当你正在用LaTeX优雅地排版论文&#xff0c;突然在引用文献时遭遇神秘的报错——这种体验就像穿着正装踩到香蕉皮。soul包作为文本装饰的瑞士军刀&#xff0c;其高亮和删除线功能深受喜爱&#xff0c;但一旦…...

NaViL-9B部署案例:中小企业用双24GB显卡替代A100实现降本增效

NaViL-9B部署案例&#xff1a;中小企业用双24GB显卡替代A100实现降本增效 1. 项目背景与价值 在AI大模型应用日益普及的今天&#xff0c;中小企业面临着高昂的硬件投入成本。传统部署方案通常需要A100等高端显卡&#xff0c;单卡价格动辄数万元&#xff0c;让许多企业望而却步…...