Fastify 是一个快速、简单、灵活的 Node.js 框架,非常适合构建高性能的 Web 应用程序。在本篇文章中,我们将介绍如何使用 Fastify 框架构建 WebSocket 服务。
WebSocket 简介
WebSocket 是一种在 Web 应用程序中实现长连接的技术,它可以让客户端和服务器端之间进行双向通信,而不必依赖轮询技术。与传统的 HTTP 请求不同,WebSocket 建立一次连接之后,客户端和服务器端就可以随时发送数据,这种实时通信非常适合实时交互的应用场景。
Fastify WebSocket 插件
Fastify 官方提供了 fastify-websocket 插件,用于实现 WebSocket 功能。该插件是基于 WebSocket-Node 实现的,提供了非常简洁、易用的 API。
在开始之前,请确保已经安装好 Fastify 和 fastify-websocket:
npm install 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 来模拟客户端连接。打开一个新终端,运行以下命令。
npm install -g wscat
安装完成后,在终端中执行以下命令连接到 WebSocket 服务。
wscat -c ws://localhost:3000/ws
连接成功后,输入消息并回车,则发送到后端。服务端会将该消息广播给所有连接的客户端。
我们可以再打开一个新终端,执行上述命令,既可以运行两个客户端同时连接 WebSocket 服务。在任何一个客户端输入消息后,服务端会将消息广播给所有客户端。
这样,我们就成功使用 Fastify 框架构建了一个 WebSocket 服务。
总结
本文介绍了如何使用 Fastify 框架构建 WebSocket 服务,并提供了代码示例。WebSocket 是一种实时通信技术,可以在 Web 应用程序中实现双向通信,这种功能非常适合实时交互的应用场景。使用 Fastify 框架可以让我们更加方便地构建高性能的 WebSocket 服务,非常适合用于实时通信类的应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64768ac3968c7c53b033b3af