使用 Fastify 框架构建 WebSocket 服务

阅读时长 6 分钟读完

Fastify 是一个快速、简单、灵活的 Node.js 框架,非常适合构建高性能的 Web 应用程序。在本篇文章中,我们将介绍如何使用 Fastify 框架构建 WebSocket 服务。

WebSocket 简介

WebSocket 是一种在 Web 应用程序中实现长连接的技术,它可以让客户端和服务器端之间进行双向通信,而不必依赖轮询技术。与传统的 HTTP 请求不同,WebSocket 建立一次连接之后,客户端和服务器端就可以随时发送数据,这种实时通信非常适合实时交互的应用场景。

Fastify WebSocket 插件

Fastify 官方提供了 fastify-websocket 插件,用于实现 WebSocket 功能。该插件是基于 WebSocket-Node 实现的,提供了非常简洁、易用的 API。

在开始之前,请确保已经安装好 Fastify 和 fastify-websocket:

构建 WebSocket 服务

我们来使用 Fastify 构建一个简单的 WebSocket 服务,该服务可以接收客户端发来的消息,并将其广播给所有连接的客户端。具体代码如下:

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- --
----- --------- - -------------

----------------------------------------------

--- ------- - --

------------------ - ---------- ---- -- ------------ -------- -- -
  -- -------
  -------------------------------

  -- ------
  ------------------------------- ------- -- -
    -- -------------------
    ---------------------- -- -
      -- ------------------ --- --------------- -
        --------------------
      -
    --
  --

  -- ------
  ----------------------------- -- -- -
    -- --------------------
    ------- - --------------------- -- ------ --- ------------------
  --
--

-------------------- --- -- -
  -- ----- ----- ---
  ---------------------- ------ --------- -- ----------------------------------
--

首先,我们注册了 fastify-websocket 插件,以便在路由中使用 websocket 选项。然后,我们创建了一个 clients 数组,用于存储所有连接到 WebSocket 服务器的客户端。

我们定义了一个 WebSocket 路由 /ws,当客户端连接到该路由时,会触发连接建立事件。在事件处理函数中,我们将客户端连接添加到 clients 数组中。

然后,我们监听了客户端消息和断开连接的事件。当客户端发送消息时,我们遍历 clients 数组,将消息广播给所有连接的客户端。当客户端断开连接时,我们从 clients 数组中删除该连接。

最后,我们使用 Fastify 的 listen 方法在端口 3000 上启动 WebSocket 服务器。

代码中注释已经非常详细,下面我们来详细讲解一下。

首先,我们使用 require 引入了 Fastify 和 WebSocket 模块。然后,我们创建了一个 Fastify 实例,并且将日志设置为 true,以便在控制台中输出日志。

下一步,我们调用 fastify.register 方法注册了 fastify-websocket 插件。这个插件是 Fastify 官方提供的,它包装了 WebSocket-Node 的底层 API,提供了非常方便的上层 API,使得开发 WebSocket 服务非常简洁易用。

我们在代码的第 7 行定义了一个空数组 clients,用于保存所有连接到 WebSocket 服务器的客户端对象。

接下来,我们定义了一个 WebSocket 路由 /ws。该路由的 websocket 选项设置为 true,表明这是一个 WebSocket 路由。当客户端连接到 /ws 路由时,Fastify 会自动升级 HTTP 协议为 WebSocket 协议,同时触发 connection 事件。

在 connection 事件的处理函数中,我们将新建立的客户端连接添加到 clients 数组中,在 clients 数组中的索引位置就是该客户端的 ID。接着,我们监听了客户端发送的消息和断开连接的事件。当收到来自某个客户端的消息时,我们将消息广播给所有连接到服务器的客户端。

最后,在客户端连接断开时,我们从 clients 数组中删除该客户端连接。注意,在 WebSocket 连接断开的事件处理函数中,我们并不需要手动关闭连接,WebSocket-Node 会自动关闭连接。

接下来,我们使用 Fastify 的 listen 方法在端口 3000 上启动了 WebSocket 服务器。

使用 WebSocket 服务

现在 WebSocket 服务已经部署完成,我们来测试一下。

我们可以使用 WebSocket 工具库 wscat 来模拟客户端连接。打开一个新终端,运行以下命令。

安装完成后,在终端中执行以下命令连接到 WebSocket 服务。

连接成功后,输入消息并回车,则发送到后端。服务端会将该消息广播给所有连接的客户端。

我们可以再打开一个新终端,执行上述命令,既可以运行两个客户端同时连接 WebSocket 服务。在任何一个客户端输入消息后,服务端会将消息广播给所有客户端。

这样,我们就成功使用 Fastify 框架构建了一个 WebSocket 服务。

总结

本文介绍了如何使用 Fastify 框架构建 WebSocket 服务,并提供了代码示例。WebSocket 是一种实时通信技术,可以在 Web 应用程序中实现双向通信,这种功能非常适合实时交互的应用场景。使用 Fastify 框架可以让我们更加方便地构建高性能的 WebSocket 服务,非常适合用于实时通信类的应用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64768ac3968c7c53b033b3af

纠错
反馈