LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

有了HTTP为什么还要Websocket?一文带你解密Websocket协议

admin
2024年10月24日 8:4 本文热度 23

我们的外卖、打车、购物等都离不开HTTP或者Websocket等通信协议的实现。作为开发、SRE,在构建和维护应用程序时,应该使用哪种通信协议?

或者面试官问你:websocket与http有什么区别?什么时候需要使用websocket?你又当如何作答呢,跟我一起盘一盘呗!!

Websocket是什么?

WebSocket是一种网络通信协议,它采用长连接的方式,提供了在单个TCP连接上进行全双工通信的方式。与HTTP协议服务端只能被动响应的方式不同,websocket是支持主动从服务端推送数据给客户端。所以常用于IM聊天,在线游戏,通知等场景

Websocket连接

WebSocket 协议会在客户端与服务端之间建立全双工通道,客户端和服务器都可以通过长连接同时发送和接收数据。这种通信方式比 HTTP 轮询具有更少的开销

因为连接的双方可以随时发送消息,所以在需要快速传输大量数据时,WebSocket 连接是一个很好的选择。

比如在一个简单的聊天室中连接多个客户端。一个 WebSocket 服务器负责管理他们的会话,一个客户端向服务器发送一条消息,服务器立即将其转发给所有其他连接的客户端。对于用户而言,他们可以实时地相互发送消息。如下图:


WebSocket 连接的优点

双向通讯

由于连接双方都可以随时发送消息,因此当您需要快速来回移动大量数据时,或者需要从服务端控制客户端设备时(比如IOT终端控制),WebSocket 连接是一个绝佳的选择。

更低的延迟

HTTP 连接中相对高频数据获取的常见模式是轮询,其中客户端定期请求新的服务器数据。也许这种通信方法的最大缺点是延迟。websocket基于双工长连接的方式,不需要等待或者去服务端查询状态,服务端处理完成之后,可以主动发送内容到客户端。

通过 WebSocket 连接,数据一旦可用就会立即会传给客户端。客户不需要一直请求它。通信延迟大大降低。

持久连接

websocket建立全双工连接之后,不出问题的情况下,就会持续保持。并且Websocket连接是可以有状态的。对于传统的 HTTP 连接,客户端发出请求,服务器发送响应后,连接将关闭。如果客户端需要更多数据,他们必须打开一个新连接。当然在HTTP/1.1引入了Keepalive的机制,来保持TCP连接,不过一般在处理一定数量的http请求之后,连接依然会被关闭,HTTP/2之后采用了长连接的方式,并支持服务端推送能力,在这两个方面是同websocket类似的。

Websocket建立连接的过程

从上图就可以看出,Websocket连接的建立是依赖于HTTP协议的。下边给大家一个简单的实例:

客户端发起websocket连接

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

看过我分享http协议的同学,就可以发现,这个分明就是一个http请求嘛。但是多了几个东西

Upgrade: websocket
Connection: Upgrade

这两个头就是websocket的核心,告诉http服务器,我发起的是websocket协议,别把我当http协议处理了

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sec-WebSocket-Key是一个base64编码的值,是客户端随机生成的,是用来验证websocket服务端

Sec-WebSocket-Protocol是用户自定义的协议标识,用来区分在同URL下,不同的服务,具体对应什么功能由业务自己实现。目的是告诉服务端,今晚我要翻菀贵人,不是什么安小主,别搞错了

最后Sec-WebSocket-Version是告诉服务器自己使用的websocket版本

如果服务端支持websocket协议,并接受了客户端的要求,就会返回下边的响应。还记得http1xx状态码?翻翻我前几文章吧

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

这就告诉客户端即将升级到websocket协议,Sec-WebSocket-Accept 表示服务端确认,后边的随机字符串是对Sec-WebSocket-Key的加密,目的就是告诉客户端,我知道啦,这是我的身份证,你查查是莞贵人没错吧。Sec-WebSocket-Protocol则是最终使用的协议。

到此,HTTP协议的使命,就已经完成了。后续的所有操作都是基于Websocket协议了。

Websocket与HTTP协议的对比

使用场景对比

HTTP

HTTP是一种应用层协议,最初设计用于在客户端和服务器之间传输超文本。它是一种无状态的协议,每个请求都是独立的,不保留前一次请求的状态信息。HTTP 通常用于传输网页、图片、文本等静态资源,以及通过 RESTful API 进行数据传输。

WebSocket

WebSocket 是一种全双工通信协议,建立在单个 TCP 连接上,允许在客户端和服务器之间进行双向通信。WebSocket 的设计旨在解决 HTTP 协议在实时性和交互性方面的不足。它广泛应用于实时聊天、在线游戏、金融行业的实时数据更新等场景。

协议对比

HTTP

  • • 协议类型: 无状态、请求-响应型协议。

  • • 通信方式: 单向通信,客户端发送请求,服务器返回响应。

  • • 持久连接: 支持持久连接,通过 HTTP Keep-Alive 头字段可以在一次连接中发送多个请求和响应。

WebSocket

  • • 协议类型: 全双工通信协议。

  • • 通信方式: 双向通信,客户端和服务器可以随时发送消息。

  • • 持久连接: 基于单个 TCP 连接,保持连接状态,避免了每次通信都需要重新建立连接的开销。

连接方式对比

HTTP

  • • 连接建立: TCP连接建立之后,客户端直接发送http请求。

  • • 连接关闭: http/2协议之前,服务器在响应之后会关闭连接(http1.1的keepalive机制也只能保证在一段时间内连接不关闭),客户端需要重新建立连接发送新的请求。

WebSocket

  • • 连接建立: 通过 HTTP 协议建立初始连接,然后升级为 HTTP 101的Upgrade机制 升级到websocket协议。建立连接后保持开放状态。

  • • 连接关闭: 可以由客户端或服务器发起关闭连接请求,而不需要重新建立连接。

通信性质对比

HTTP

  • • 单向通信: 请求-响应模式,客户端发送请求,服务器返回响应。

  • • 轮询: 实现实时性的方式之一是通过轮询,但效率低,增加了网络负担。

WebSocket

  • • 双向通信: 客户端和服务器可以随时发送消息,实现实时的双向通信。

  • • 事件驱动: 基于事件的模型,服务器或客户端可以通过事件触发实现及时的通信。

性能对比

HTTP

  • • 资源消耗: http/2之前请求都需要重新建立连接,增加了资源消耗。

  • • 实时性: 不适用于对实时性要求较高的应用,如在线游戏、实时聊天、IOT设备实时控制等。

WebSocket

  • • 资源消耗: 通过单个 TCP 连接保持长连接,减少了资源消耗。

  • • 实时性: 适用于对实时性要求较高的应用,具有低延迟和高吞吐量的特点。

协议头对比

HTTP

  • • 头部开销: 每个请求和响应都有较大的头部开销,包含大量元数据。

  • • Cookie: 支持通过 Cookie 进行状态管理。

WebSocket

  • • 头部开销: 头部开销相对较小,只包含必要的控制信息。

  • • Cookie: 可以通过 HTTP 协议的 Upgrade 头字段携带 Cookie 进行身份验证。

安全性对比

HTTP

  • • 安全性: HTTP 本身不具备加密功能,数据传输可能被窃听或篡改。

  • • TLS/SSL: 可以通过使用 HTTPS(基于 TLS/SSL 协议)来加密通信。

WebSocket

  • • 安全性: 支持加密传输,可以通过 WSS(WebSocket Secure)实现安全通信。

  • • TLS/SSL: 基于 TLS/SSL 协议,提供端到端的加密。

状态及缓存

HTTP

  • • http请求无状态且独立的

  • • http请求可以被缓存

Websocket

  • • websocket是可以有状态的,消息会可能会有上下文的关联关系(取决于业务实现)

  • • websocket本身无法像http协议那样做内容缓存

WebSocket与HTTP:选择合适的协议

在选择 WebSocket 或 HTTP 协议之前,请考虑一下您正在构建的内容以及原因。请注意,每种通信协议在其他协议通常不足的几个领域都表现出色。

WebSocket 与 HTTP 连接之间的技术权衡

了解这两种通信协议之间的技术权衡可以让您深入了解哪一种最适合您的项目。

连接设置和管理

考虑随着时间的推移,您需要如何建立和管理连接

对于 WebSocket,持久连接是通过客户端和服务器之间的握手建立的。即使消息之间存在明显的延迟,它也会在会话期间保持打开状态。

对于 HTTP,连接是通过握手建立的,然后用于Request-Response。HTTP/1.1 允许将同一个 TCP/IP 连接重复用于多个请求-响应对,从而减少开销并改善延迟,但程度与 WebSocket 不同。连接仍将在相对较短的时间内关闭,从几秒到几分钟不等。

数据传输和编码

考虑您希望如何传输数据

WebSocket 连接使用全双工双向通信 - 连接的任何一方都可以随时发送消息。HTTP 连接使用半双工通信;一次只有一方可以通信,服务器的消息始终响应客户端的请求。如果您需要从服务端主动发消息给客户端,那websocket就最合适不过。

WebSocket 和 HTTP 都可以发送以基于文本的格式(例如 JSON、XML 和纯文本)编码的数据,以及二进制编码的数据。

错误处理和恢复

考虑哪些错误处理方法对用户影响最小

WebSocket 连接可能会因各种原因而失败,包括应用程序代码中的错误。客户端会收到一个错误事件,他们可以Watch该事件,并且您可以按照自己认为合适的方式处理监听到的错误。

当然,HTTP 连接可能会遇到类似的情况,但某些常见架构可以在错误处理方面提供优势。 HTTP 指定了服务器可以响应的一系列状态代码,以大致指示请求是否成功。4xx 和 5xx 范围分别是为客户端和服务器错误保留的。

可扩展性

考虑您的应用程序的资源消耗需求

WebSocket 连接被设计的简单高效,是事件驱动的——仅当有需要发送消息的内容时才会发送消息。

HTTP 连接可以通过长轮询实现类似于实时功能的功能,随着请求增长,处理所有这些长期 HTTP 请求的开销会不断增加。

在HTTP/2中使用HTTP Stream,连接可以始终保持打开状态来传输数据流,这在概念上类似于 WebSocket,但它的push主要是基于已有的请求和可能的需求而被动触发的。

WebSocket 与 HTTP 连接的性能注意事项

考虑您的应用程序的性能预期

得益于持久连接,WebSocket 可以减少开销和延迟。这会带来更好的性能、更快的实时更新以及更少的处理能力。

由于 HTTP 通常必须在会话的生命周期内处理多个连接,因此与 WebSocket 相比,它自然会花费更多的时间和资源。

WebSocket 与 HTTP 连接的安全性

考虑哪一个对您来说最容易确保安全

WebSocket 和 HTTP 连接在安全考虑方面类似。websocket的WS与HTTP都会到如跨站脚本的攻击。通过TLS的加持,WSSHTTPS都可以实现加密通信,这两种协议都足够安全。

通信协议的混合方法

通常,建议的方法是在您的系统中同时支持这两种协议,以发挥其最擅长的作用。这意味着对大多数标准网络流量使用 HTTP 连接,对任何需要实时通信的内容使用 WebSocket 连接,例如通知IM通话IOT控制等。

当然,你还可以考虑评估补充或替代技术;毕竟,WebSocket 和 HTTP 并不是实时通信的唯一选择。 WebRTC来实现音视频通话服务,MQTT来实现IOT设备控制等等。

总结

您现在应该对如何使用 WebSocket 和 HTTP 通信协议有了一定的了解,明确了他们的优点和缺点,并且可以根据自己的需求在二者之间进行权衡。当然,你也可以依此应对各个公司关于HTTP协议,与websocket协议的考题了,祝您一切顺遂。


该文章在 2024/10/24 9:19:37 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved