Fastify 中使用 WebSocket 实现实时通讯

阅读时长 7 分钟读完

在现代 Web 应用中,实时通讯已经成为了必不可少的一部分。传统的轮询方式或者长连接方式已经不能满足应用的需求,这时候 WebSockets 成为了首选的方式。

Fastify 是一个高效的 Node.js Web 框架,它提供了良好的性能和易用性。在 Fastify 中使用 WebSocket 可以让我们更加方便地实现实时通讯功能。

WebSocket 概述

WebSocket 是一个基于 TCP 协议的全双工通信协议,在客户端和服务器建立连接后,可以双向传输数据。相较于传统的 HTTP 请求,WebSocket 的优势在于:

  • 连接一次,数据传输多次。
  • 实时性更高,数据传输更快。
  • 可以使用更接近网络层的协议,减少了头部的大小,降低了网络负载。

Fastify-WebSocket

Fastify-WebSocket 是一个 Fastify 插件,可以方便地在 Fastify 中使用 WebSocket。它使用了 ws 库作为 WebSocket 的实现。

安装

使用 npm 进行安装:

使用

在 Fastify 应用中注册 Fastify-WebSocket 插件:

Fastify-WebSocket 插件注册后,可以在 Fastify 的路由处理函数中使用 WebSocket 服务。

建立连接

在路由处理函数中,可以使用装饰器语法 request.websocket() 来创建 WebSocket 连接:

上面例子中,fastify.get() 方法创建了一个 GET 请求的路由,使用 websocket 参数启用 WebSocket 服务。在路由处理函数中,request.websocket() 方法创建了一个 WebSocket 连接,可以在回调函数中处理消息。

发送消息

WebSocket 连接建立后,可以使用 ws.send() 方法向客户端发送消息:

断开连接

当 WebSocket 连接关闭时,可以在连接对象 connection 上监听 close 事件:

示例应用

为了演示 Fastify-WebSocket 的使用,我们创建一个 WebSocket 聊天应用。

前端

在前端,我们使用 WebSocket API 连接到服务器:

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

    --- --

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

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

在页面加载后,用户输入姓名,点击 Connect 按钮连接到服务器。当连接成功后,用户可以输入聊天内容并发送。

后端

在后端,我们创建一个路由处理 WebSocket 连接:

上面代码中,WebSocket 连接建立后,我们在回调函数中监听 message 事件,收到消息后遍历 WebSocket 服务器中的所有客户端,使用 ws.send() 方法发送消息。

运行应用

在前端和后端代码放在同一个目录下,运行后端代码:

打开浏览器访问 http://localhost:3000/chat.html,输入姓名并点击 Connect 按钮连接到服务器。当连接成功后,可以在界面下方输入聊天内容并发送。

结论

Fastify-WebSocket 可以方便地在 Fastify 应用中使用 WebSocket,帮助我们更加方便地实现实时通讯功能。通过上面的示例,我们可以掌握如何在 Fastify 中创建 WebSocket 服务,建立、发送消息和断开连接。

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

纠错
反馈