计算机网络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连接的安全性和可靠性,同时也允许服务器和客户端在建立连接之前进行必要的协商。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472971.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展,嵌入式系统、物联网技术、智能设备…

PaoluGPT——千里挑一

开启题目: 点击“开始聊天”,发现已经跑路: 点击“查看聊天记录”,会发现一大堆聊天记录: 聊天记录在/list目录下 点两个具体的聊天记录,发现地址栏中URL发生变化,都是 /view?conversation_id…

L11.【LeetCode笔记】有效的括号

目录 1.题目 2.分析 理解题意 解决方法 草稿代码 ​编辑 逐一排错 1.当字符串为"["时,分析代码 2.当字符串为"()]"时,分析代码 正确代码(isValid函数部分) 提交结果 3.代码优化 1.题目 https://leetcode.cn/problems/valid-parentheses/descri…

paddle表格识别数据制作

数据格式 其中主要数据有两个一个表格结构的检测框&#xff0c;一个是tokens&#xff0c;注意的地方是 1、只能使用双引号&#xff0c;单引号不行 2、使用带引号的地方是tokens里面 "<tr>", "<td", " colspan2", ">",&quo…

深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器

在深度学习的计算机视觉任务中&#xff0c;提升图像分辨率和压缩特征图是重要需求。Pixel Shuffle和Pixel Unshuffle是在超分辨率、图像生成等任务中常用的操作&#xff0c;能够通过转换空间维度和通道维度来优化图像特征表示。本篇文章将深入介绍这两种操作的原理&#xff0c;…

阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统

近期&#xff0c;阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress&#xff0c;ReactPress一个基于 Next.js 的博客和 CMS 系统&#xff0c;可查看 demo站点。&#xff08;fecommunity 投稿&#xff09; ReactPress&#xff1a;一款值得推荐的开源发布平台 …

Amazon Web Services (AWS)

一、Amazon Web Services (AWS)介绍 1、简介 2、产品 AWS 提供了各种云计算服务&#xff0c;包括 DynamoDB、S3、EC2、Lambda 等等。 登录aws后点击所有服务也可以看到amazon的所有服务&#xff1a; 3、免费试用产品 除了免费的Amazon Step Functions、Amazon Lambda&#…

rk3399开发环境使用Android 10初体验蓝牙功能

版本 日期 作者 变更表述 1.0 2024/11/10 于忠军 文档创建 零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0…

Redis实战案例(黑马点评)

List item Redis实战案例&#xff08;黑马点评&#xff09; 一、短信登录 tomcat的运行原理&#xff1a; 当用户发起请求时&#xff0c;会访问tomcat注册的端口&#xff0c;任何程序想要运行&#xff0c;都需要有一个线程对当前端口号进行监听&#xff0c;当用户和tomcat连…

每行数据个数在变的二维数组的输出

#include<stdio.h> int main() {//定义四个一维数组int arr1[1] { 1 };int arr2[3] { 1,2,3 };int arr3[5] { 1,2,3,4,5 };int arr4[7] { 1,2,3,4,5,6,7 };//把四个一维数组放进一个二维数组int* arr[4] { arr1,arr2,arr3,arr4};//预先计算好每一个数组真实的长度in…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

MySQL数据库:SQL语言入门 【2】(学习笔记)

目录 2&#xff0c;DML —— 数据操作语言&#xff08;Data Manipulation Language&#xff09; &#xff08;1&#xff09;insert 增加 数据 &#xff08;2&#xff09;delete 删除 数据 truncate 删除表和数据&#xff0c;再创建一个新表 &#xff08;3&#xf…

第二十一周机器学习笔记:动手深度学习之——数据操作、数据预处理

第二十周周报 摘要Abstract一、动手深度学习1. 数据操作1.1 数据基本操作1.2 数据运算1.2.1 广播机制 1.3 索引和切片 2. 数据预处理 二、复习RNN与LSTM1. Recurrent Neural Network&#xff08;RNN&#xff0c;循环神经网络&#xff09;1.1 词汇vector的编码方式1.2 RNN的变形…

购物车demo全代码-对接支付宝沙箱环境

创建项目 vue create alipay-demoAlipayDemo.vue <template><div class"cart-container"><h2>商品列表</h2><table class"product-table"><tr><th>商品</th><th>价格</th><th>商品描…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法&#xff1a;参数说明&#xff1a;返回值&#xff1a;使用示例&#xff1a;示例代码&#xff1a; 说明&#xff1a; 前言 有时候使用的时候&a…

超全超详细使用SAM进行高效图像分割标注(GPU加速推理)

一、前言 &#x1f449; 在计算机视觉任务中&#xff0c;图像分割 是重要的基础工作&#xff0c;但人工标注往往耗时耗力。Meta推出的 SAM&#xff08;Segment Anything Model&#xff09;&#xff0c;大幅提升了分割效率和精度&#xff0c;让标注工作更加轻松。本篇博客将详细…

JavaEE 重要的API阅读

JavaEE API阅读 目的是为了应对学校考试&#xff0c;主要关注的是类的继承关系、抛出错误的类型、包名、包结构等等知识。此帖用于记录。 PageContext抽象类 包名及继承关系 继承自JspContext类。PageContext 实例提供对与某个 JSP 页⾯关联的所有名称空间的访问&#xff0…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

Python学习笔记(2)正则表达式

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 在 Python 中&#xff0c;使用 re 模块提供的函数来处理正则表达式&#xff0c;允许你在字符串中进行模式匹配、搜索和替换操作。 1 正则表达式 正则表达式(Regular Expressi…