关于 WebSocket 和 HTTP 区别的思考以及一个最简单的 WebSocket 的客户端和服务器实现(1)

简介: 关于 WebSocket 和 HTTP 区别的思考以及一个最简单的 WebSocket 的客户端和服务器实现

笔者之前与一位同事研究了 Cypress 的 visit 方法,其源码实现最终是调用了 WebSocket 向 visit 参数里指定的 website 通行并获取数据,见下图变量 ev.data 的值。

image.png



我这位同事的研究成果,通过 Joplin 笔记记录如下如下。


于是笔者心里有一个疑问,为什么 Cypress 的 visit 方法选择了 WebSocket 作为与目标网站的通信技术呢?为什么不直接走 HTTP 协议,比如用 ES6 原生支持的 fetch 去访问目标网站呢?


要回答这个问题,我们先要理解到底什么是 WebSocket,以及它与 HTTP 相比较的优缺点。


诚然,WebSocket 可以在用户的浏览器和服务器之间打开交互式通信会话,浏览器可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应。


image.png


WebSocket 基于 TCP 连接,在服务器和浏览器间提供了全双工通信功能,即服务器可以主动推送数据到浏览器端,而这在 HTTP 协议中是不可能实现的,HTTP 协议只支持浏览器到服务器端的 Request - Response 方式,即浏览器客户端如果想查询服务器端是否有最新的事件发生,则只能采取低效的轮询方式进行。


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


笔者注:HTTP 请求头部的 Connection: keep-alive 字段,可以实现连接重用的需求吗?


image.png


当启用 Keep-Alive 时,客户端和服务器同意为后续请求或响应保持连接打开。


默认情况下,HTTP 连接在数据事务结束时关闭。 这意味着客户端创建一个新连接来请求页面的每个文件,服务器在发送数据后关闭这些 TCP 连接。


但是,如果服务器需要同时响应多个 HTTP 请求并为每个新的 TCP 连接提供一个文件,则站点页面的加载时间将会增加。 这可能会导致糟糕的用户体验。


为了克服这个问题,网站所有者需要启用 Keep-Alive 标头来限制新连接的数量。


通过打开 Keep-Alive 连接标头,客户端可以通过单个 TCP 连接下载所有内容,例如 JavaScript、CSS、图像和视频,而不是为每个文件发送不同的请求。


这是一张演示 Keep-Alive 工作原理的图片:


image.png


相关文章
|
18天前
|
弹性计算 运维 搜索推荐
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
随着数字化转型的浪潮不断推进,越来越多的企业和公司开始将业务迁移到云端,而搭建一个专业、高效的企业官网成为了上云的第一步。企业官网不仅是展示公司形象、产品和服务的重要窗口,更是与客户沟通、传递价值的关键渠道。随着阿里云服务器和建站产品的知名度越来越高,越来越多的用户选择阿里云的产品来搭建自己的官网。本文将深入探讨在阿里云平台上,如何选择最适合自己的建站方案:云服务器建站、云·速成美站还是云·企业官网。
103 13
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
|
14天前
|
弹性计算 Ubuntu 安全
阿里云服务器镜像选择全指南:不同类型的镜像区别及选择参考
阿里云服务器镜像,作为ECS实例的“装机盘”,不仅提供了操作系统,还包含了初始化应用数据和预装软件。选择合适的镜像对于云服务器的性能和稳定性至关重要。本文将详细解析阿里云服务器提供的多种镜像类型,包括公共镜像、自定义镜像、共享镜像、云市场镜像和社区镜像,以供参考和选择。
阿里云服务器镜像选择全指南:不同类型的镜像区别及选择参考
|
1天前
|
弹性计算 缓存 前端开发
阿里云服务器ECS u1、c7、e实例、c8i实例有什么区别?性能有差异吗?
阿里云ECS提供多样化的实例规格,满足不同需求。经济型e实例为共享资源,适合轻负载应用;通用算力型u1与计算型c7/c8i为独享资源,后者性能更优。c7与c8i均具1:2的CPU内存比,但c8i作为第八代服务器,性能超越c7。价格方面,2核4G的u1实例企业用户专享价199元/年,性价比突出。选择时,轻负载可选e实例,中等负载选u1,高性能需求则推荐c7或c8i实例。更多详情参见阿里云官方页面。
|
4天前
|
开发框架 运维 应用服务中间件
阿里云轻量应用服务器82元和298元与云服务器99元和199元区别及选择参考
目前阿里云推出了几款价格比较实惠的轻量应用服务器和云服务器,轻量应用服务器有2核2G3M 50GB高效云盘,价格为82元1年;2核4G4M 60GB高效云盘,价格为298元1年;经济型e实例2核2G,40G ESSD Entry盘,3M带宽,价格为99元1年;通用算力型u1实例2核4G,80G ESSD Entry盘,5M带宽,价格为199元1年。本文将对这几款轻量应用服务器和云服务器进行对比和测评,分析其性能和适用场景,以供大家选择参考。
阿里云轻量应用服务器82元和298元与云服务器99元和199元区别及选择参考
|
7天前
|
缓存 数据安全/隐私保护 UED
代理服务器在HTTP请求中的应用:Ruby实例
代理服务器在HTTP请求中的应用:Ruby实例
|
10天前
|
前端开发 网络协议 物联网
Django Web:搭建Websocket服务器(入门篇)
Django Web:搭建Websocket服务器(入门篇)
20 1
|
13天前
|
弹性计算 负载均衡 定位技术
阿里云服务器地域有什么区别?地域选择建议
阿里云服务器地域选择关乎网络性能与合规性。应基于四点考量:速度延迟、内网互通、价格差异及备案需求。原则上,用户宜选靠近目标用户的地域以降低延迟;需多产品内网互通时,确保它们位于同一地域;留意各地域价格波动以优化成本;涉及经营性网站须在特定地域(如北京、深圳)选购并完成备案。具体地域分布包括中国内地、亚太、欧美及中东地区,详情参见阿里云官方文档。
|
20天前
|
存储 运维 Java
函数计算产品使用问题之如何使用Python的requests库向HTTP服务器发送GET请求
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
19天前
|
存储 域名解析 弹性计算
云服务器 ECS产品使用问题之ECS和轻量级服务器的区别是什么
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
21天前
|
弹性计算 缓存 前端开发
阿里云服务器ECS经济型e实例、u1、c7和c8i有什么区别?2核4G、4核8G、8核16G详解
阿里云服务器ECS经济型e实例、ECS通用算力型u1、ECS计算型c7和c8i有什么区别?阿小云:经济型e实例是共享型云服务器,u1、c7和c8i都是企业级独享型云服务器;ECS计算型c7和c8i的CPU内存比都是1:2,不同点在于c7是第七代云服务器,c8i是第八代云服务器;性能方面c8i要优于c7,c7实例性能要高于u1实例,u1实例性要比e实例更好一些。
61 5