Serverless 实现 WebSocket 的最佳实践详解

阅读时长 7 分钟读完

随着互联网应用的不断发展,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

纠错
反馈