计算机网络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协议的区别关键字记忆

特性 WebSocket HTTP
连接类型 持久连接 无状态连接
连接数量 每个客户端一个持久连接 多个请求/响应周期,每个周期一个连接
通信模式 全双工通信 请求/响应模式
性能 低延迟,适用于实时应用 延迟较高,适用于请求数据
头部开销 无额外开销 每个请求/响应都需要携带头部信息
适用场景 实时通信,如聊天应用、游戏 网页内容传输,文件下载
服务器推送 支持 不支持,除非使用长轮询或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连接的安全性和可靠性,同时也允许服务器和客户端在建立连接之前进行必要的协商。

相关推荐
ZachOn1y7 分钟前
计算机网络:应用层 —— 应用层概述
计算机网络·http·https·应用层·dns
kaixin_learn_qt_ing1 小时前
了解RPC
网络·网络协议·rpc
TodoCoder2 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
Wyang_XXX3 小时前
CSS 选择器和优先级权重计算这么简单,你还没掌握?一篇文章让你轻松通关面试!(下)
面试
冰镇屎壳郎3 小时前
计算机网络 八股青春版
计算机网络
爱吃水果蝙蝠汤3 小时前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
网络安全King5 小时前
计算机网络基础(2):网络安全/ 网络通信介质
计算机网络·安全·web安全
liyinuo20176 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
代码中の快捷键6 小时前
java开发面试有2年经验
java·开发语言·面试
bufanjun00110 小时前
JUC并发工具---ThreadLocal
java·jvm·面试·并发·并发基础