随着互联网应用的不断发展,WebSocket 作为一种轻量级、高效、实时性好的双向通信协议,在实时消息推送、在线聊天、游戏等领域得到了广泛应用和深入发展。然而,在传统架构下,WebSocket 的实现需要配置繁琐的服务器环境,管理庞大的硬件资源,而且需要实时响应用户的请求,即使空闲时间也是在百分之百的使用状态,这给运维带来了很大的困扰。
为了解决这些问题,Serverless 架构应运而生,它不仅能够极大地降低运维成本,而且免去了对硬件的依赖,让开发者只需专注于业务逻辑的实现,再利用云厂商提供的健壮可靠的服务,快速搭建 WebSocket 应用。本文将详细解析 Serverless 实现 WebSocket 的最佳实践。
Serverless 简介
Serverless 架构是一种全新的、基于云平台的开发思想,它的核心理念是“按需分配、弹性伸缩、付费即用”,让用户无需关心硬件设备的选型、部署环境的搭建和服务运维的问题,只需要专注于业务逻辑的实现,就能够快速实现应用的搭建和部署。Serverless 平台的其中一个代表就是 AWS Lambda,让我们在接下来的内容中举例说明。
WebSocket 简介
WebSocket 最早是 HTML5 规范中提出的一种客户端和服务器端间实时双向通信的技术。与传统的请求-响应模式相比,WebSocket 的优点是实时性好、开销小、协议支持广泛等。通过 WebSocket,客户端和服务端都可以发送和接收消息,远程服务器可以推送实时的数据给客户端,而客户端也可以实时地将消息发送到远程服务器。WebSocket 已经成为现代 Web 应用中实时交互的标准方案之一,无论是聊天、游戏等应用场景都需要大量使用。
使用 AWS Lambda 服务实现 WebSocket 应用
因为本篇文章的重点是介绍 Serverless 实现 WebSocket 的最佳实践,下面我们将选取 AWS Lambda 进行讲解。AWS Lambda 是亚马逊云服务(AWS)提供的一个计算服务,使用者无需关心底层服务器的配置和管理,只需要编写代码并上传至 Lambda 中,Lambda 会调用这个函数并按照消费资源的情况进行支付。下面我们将详细介绍如何使用 AWS Lambda 实现 WebSocket 应用。
步骤一:创建 Lambda 函数
登录 AWS 管理控制台,进入 Lambda 模块,点击“创建函数”选择“基于服务器的应用程序”选项,填写函数的名称和相应的运行环境(本示例选择 Node.js 14),如下图所示:
点击“创建函数”后,我们就可以进入到添加代码的页面。在代码框框中输入我们的示例代码。
步骤二:添加代码并打包
本文示例代码如下:
-- -------------------- ---- ------- ----- --- - ------------------- ----- --------- - ---------------------------- --------------- - ------- -------- -- - ----- --- - --- ---------- ----- ------ - ----------------------------------------------------------------------- ----- ------ - --- ----------- ----------- ---------------------------- ---------------------- ----- --- -------- ----------------------- - ------ ----- - -------------------- ----------------- - -- ---------------------------------- - ----------------- ------------------ ------- ---------- ---- ------ ----------------- ------------ ------- - ----- ---------- - -------------------- ---------------- ------------------ ------- ---------- ------------ ------------------------ ----------------- - -- ------------- --- ------- - --------------------- -------- ---------------------- ----------------- ------------ ----------------- --------- ------ -- ------------- ----- - -- ------ - -------------------- ------------------- ---- -- --- ----- ------------ - --- ----------------------- ----- ---------------------- - --- ---------------------- -------------------- ------------ - ------------------ ------- ---- --------------------------- ---------------- --- --- --
代码比较简单,是一个 WebSocket 的 echo 服务,当一个客户端发送消息时,服务器将重复发送相同的消息到客户端,并将消息发送到 AWS SQS 队列中。
添加完代码后,点击右上角的“打包”按钮,生成一个 zip 包,下载到本地。
步骤三:创建 WebSocket
安装和配置 WebSocket 的方法比较多,这里我们选取 AWS 的 Application Load Balancer(ALB)为例,它是一种具有自动缩放和高可用性的服务器负载均衡器,可以把用户流量分配到多个目标,实现容错和负载均衡。
首先,我们需要创建一个 ALB 实例,然后添加监听规则。为了支持 WebSocket,需要监听的端口必须是 80 或 443。下面是示例配置:
然后,我们需要创建一个 Target Group,将 ALB 监听到的 WebSocket 请求分发到 Lambda 函数中去,如下图所示:
最后,我们需要在 Lambda 函数中配置一些环境变量,包括 sqsUrl、region 和 accountId。
步骤四:测试
完成上面的配置后,我们就可以进行测试了。在浏览器中,键入 WebSocket 的 URL,如 ws://<loadbalancerdns>:<port>,例如:ws://my-load-balancer-1234567890.us-west-2.elb.amazonaws.com:80,然后点击连接按钮。客户端就会连接到 WebSocket 服务器上,接着可以发送任何消息到服务端,服务端会自动将消息返回,如下图所示:
总结
本篇文章详细讲述了 Serverless 实现 WebSocket 的最佳实践,以 AWS Lambda 为例,通过 ALB 和 SQS 的协作实现了 WebSocket 应用的搭建和部署,并提供了示例代码和相应的配置流程,这也为 Web 应用的实现和推广提供了一条全新的思路。未来,随着 Serverless 技术的不断进步和完善,预计 WebSocket 应用在全球范围内的应用和推广会越来越广泛。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649848b248841e989455677c