如何使用 Hapi.js 实现极简单聊天室

阅读时长 11 分钟读完

在本文中,我们将介绍如何使用 Hapi.js 实现一个简单的聊天室。Hapi.js 是一个用于构建 Node.js Web 应用程序的框架,它提供了一个强大而灵活的基础,可以让开发者快速构建出高效、可扩展的 Web 应用。

准备工作

在开始编写代码之前,我们需要确保我们已经完成了以下准备工作:

  • 安装 Node.js 和 npm
  • 安装 Hapi.js

如果您还没有完成这些准备工作,请先完成它们,然后再继续阅读本文。

创建服务器

首先,我们需要创建一个 Hapi.js 服务器。以下是一个简单的服务器示例:

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

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

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

-------
展开代码

在上面的代码中,我们创建了一个 Hapi.js 服务器,并将其设置为监听本地主机的 3000 端口。然后,我们在 init 函数中启动了服务器。

添加 WebSocket 支持

我们将使用 WebSocket 协议来实现聊天室功能。Hapi.js 本身并不支持 WebSocket,但是它提供了一种方便的方式来将 WebSocket 集成到应用程序中。

首先,我们需要安装 @hapi/ws 模块,它是 Hapi.js 的 WebSocket 插件。使用以下命令进行安装:

然后,我们需要将 WebSocket 插件添加到我们的服务器中:

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

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

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

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

-------
展开代码

在上面的代码中,我们通过调用 server.register 方法将 WebSocket 插件添加到服务器中。在 options 对象中,我们可以设置一些选项来配置 WebSocket 插件的行为。

处理 WebSocket 连接

现在,我们已经准备好处理 WebSocket 连接了。我们将使用 Hapi.js 的路由机制来处理 WebSocket 连接。以下是一个简单的路由示例:

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

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

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

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

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

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

-------
展开代码

在上面的代码中,我们定义了两个路由:一个是用于处理 HTTP 请求的路由,另一个是用于处理 WebSocket 连接的路由。

在 WebSocket 路由的 options 对象中,我们使用 websocket 插件的选项来配置 WebSocket 连接的行为。在这个示例中,我们定义了 connectdisconnect 处理程序,它们分别在客户端连接和断开连接时被调用。

处理 WebSocket 消息

现在,我们已经可以处理 WebSocket 连接了,但是我们还需要处理客户端发送的消息。以下是一个简单的 WebSocket 消息处理器的示例:

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

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

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

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

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

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

-------
展开代码

在上面的代码中,我们添加了一个 message 处理程序,它在客户端发送消息时被调用。在这个示例中,我们只是简单地将消息输出到控制台上。

发送消息给所有客户端

现在,我们已经可以接收客户端发送的消息了,但是我们还需要将这些消息发送给所有连接到服务器的客户端。以下是一个简单的消息广播器的示例:

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

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

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

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

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

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

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

-------
展开代码

在上面的代码中,我们添加了一个 sockets 数组来存储所有连接到服务器的客户端。在 connect 处理程序中,我们将新连接的客户端添加到 sockets 数组中。在 disconnect 处理程序中,我们从 sockets 数组中移除断开连接的客户端。在 message 处理程序中,我们使用 forEach 方法将消息发送给所有客户端,除了发送消息的客户端本身。

结论

在本文中,我们介绍了如何使用 Hapi.js 实现一个简单的聊天室。我们使用了 Hapi.js 的路由机制和 WebSocket 插件来处理 WebSocket 连接和消息,并使用了简单的广播器来将消息发送给所有客户端。我们希望这篇文章对你有所帮助,让你更好地理解如何使用 Hapi.js 构建 Web 应用程序。

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

纠错
反馈

纠错反馈