什么是 WebSocket,它与 HTTP 有何不同?

今天分享一篇有关于WebSocket协议相关的文章,也是近期再实际项目应用中使用到该协议的场景,想具体了解下该协议的工作原理以及实际应用场景

一、它与HTTP/HTTPS协议有什么区别呢?

HTTP 和 WebSocket 都是客户端-服务器通信中使用的通信协议

1. HTTP协议

HTTP 是单向的,客户端发送请求,服务器发送响应。举个例子,当用户向服务器发送请求时,该请求以 HTTP 或 HTTPS 的形式发送,服务器收到请求后向客户端发送响应,每个请求都与相应的响应相关联,发送响应后连接关闭,每个 HTTP 或 HTTPS 请求每次都会建立与服务器的新连接,并且在获得响应后,连接会自行终止

HTTP 是一种运行在 TCP 之上的无状态协议,它是一种面向连接的协议,它使用三向握手方法保证数据包传输的传递,并重新传输丢失的数据包

HTTP 可以运行在任何可靠的面向连接的协议之上,例如 TCP、SCTP。当客户端向服务器发送 HTTP 请求时,客户端和服务器之间的 TCP 连接打开,在收到响应后 TCP 连接终止,每个 HTTP 请求都会打开到服务器的单独 TCP 连接,例如,如果客户端发送向服务器发出 10 个请求,将打开 10 个单独的 TCP 连接。并在获得响应/回退后关闭

以ASCII编码的HTTP消息信息,每个HTTP请求消息由HTTP协议版本(HTTP/1.1、HTTP/2)、HTTP方法(GET/POST等)、HTTP头(内容类型、内容长度)、主机信息等组成. 以及包含正在传输到服务器的实际消息的正文。HTTP 标头的大小从 200 字节到 2 KB 不等,HTTP 标头的常见大小为 700-800 字节。当 Web 应用程序在客户端使用更多 cookie 和其他工具来扩展代理的存储功能时,它会减少 HTTP 标头负载

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

2. WebSocket协议

WebSocket 是双向的,全双工协议,用于客户端-服务器通信的同一场景,与 HTTP 不同,它从ws://或wss://开始。它是一个有状态的协议,这意味着客户端和服务器之间的连接将保持活动状态,直到它被任何一方(客户端或服务器)终止。客户端和服务器中的任何一个关闭连接后,连接都会从两端终止

让我们举一个客户端-服务器通信的例子,客户端是一个网络浏览器和一个服务器,每当我们启动客户端和服务器之间的连接时,客户端-服务器进行握手并决定创建一个新的连接和这个连接将保持活动状态,直到被其中任何一个终止。当连接建立并处于活动状态时,通信将使用相同的连接通道进行,直到终止

这就是在客户端-服务器握手之后,客户端-服务器决定一个新连接以保持其活动状态,这个新连接将被称为 WebSocket。一旦建立通信链路并打开连接,消息交换将以双向模式进行,直到客户端-服务器之间的连接持续存在。如果其中任何一个(客户端-服务器)死亡或决定关闭连接,则双方都将关闭。socket 的工作方式与 HTTP 的工作方式略有不同,状态码 101 表示 WebSocket 中的切换协议

二、WebSocket实际应用场景

1. 实时网络应用

实时网络应用使用网络套接字在客户端显示数据,由后端服务器不断发送。在WebSocket中,数据不断被推送/传输到同一个已经打开的连接中,这就是 WebSocket 速度更快并提高应用程序性能的原因

例如在交易网站或比特币交易中,用于显示价格波动和运动数据由后端服务器通过WebSocket通道不断推送到客户端

2. 游戏应用

在游戏应用中,你可能会关注,数据是不断被服务器接收的,不刷新 UI 就会在屏幕上生效,UI 会自动刷新,甚至没有建立新的连接,所以它是在游戏应用程序中非常有用

3. 聊天应用程序

聊天应用程序使用 WebSockets 只建立一次连接,用于在订阅者之间交换、发布和广播消息。它重用相同的 WebSocket 连接,用于发送和接收消息以及一对一的消息传输

三、何时不适用WebSocket协议?

如果我们想要通过网络传输的任何实时更新或连续的数据流,可以使用 WebSocket。如果我们想获取旧数据,或者只想获取一次数据以使用应用程序处理它,我们应该使用HTTP 协议,不需要非常频繁或仅获取一次的旧数据可以通过简单的 HTTP 请求进行查询,所以在这种情况下,最好不要使用 WebSocket

注意:如果我们只加载一次数据,RESTful Web 服务就足以从服务器获取数据

四、HTTP 和 WebSocket 连接的区别?

WebSocket连接HTTP 连接
WebSocket 是一种双向通信协议,可以通过重用已建立的连接通道,将数据从客户端发送到服务器或从服务器发送到客户端。连接一直保持活动状态,直到被客户端或服务器终止HTTP 协议是一种单向协议,它工作在 TCP 协议之上,TCP 协议是一种面向连接的传输层协议,我们可以在收到响应 HTTP 连接关闭后使用 HTTP 请求方法创建连接
几乎所有的实时应用程序(如(交易、监控、通知)服务)都使用 WebSocket 在单个通信通道上接收数据简单的 RESTful 应用程序使用无状态的 HTTP 协议
所有经常更新的应用程序都使用 WebSocket,因为它比 HTTP 连接更快。当我们不想在特定时间内保留连接或重新使用连接来传输数据时;HTTP 连接比 WebSocket 慢。

以上就是基于WebSocket的介绍以及实际工作中的应用场景,了解这个知识点方便我们后期在服务端测试工作以及抓包时看到类似的请求能够知一二,更深入的进行测试,挖掘潜在的问题

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值