Hapijs + Socket.io 实现实时通信

阅读时长 8 分钟读完

随着互联网的普及,实时通信在网站构建中成为了必不可少的一环。实时通信能够增强网站与用户之间的交互体验,而 Hapijs 和 Socket.io 则分别是 Node.js 框架和 Websocket 套件的代表。本文将会介绍如何使用 Hapijs 和 Socket.io 两个工具库,实现一个简单的实时通信网站,并带有示例的完整代码。

Hapijs 简介

Hapijs 是一个用于构建应用程序的 Node.js 框架,其核心功能包括路由定义、插件管理、输入数据验证等。这款框架的特点在于其智能配置和插件化,完整了和按需构建的特性。同时其易用性和扩展性也非常高,在大型项目中也有不错的表现。

Socket.io 简介

Socket.io 是一个基于 Websocket 的实时网络通信库,能够使浏览器和服务器之间建立稳固的双向连接。通过它,我们可以保持客户端与服务器之间始终保持连接,从而实现实时通信。同时 Socket.io 还有一个优秀的特性是其自动降级为垂直传输方式,这就可以保证在不支持 Websocket 的情况下也可以做到实时通信,在网络较慢或不稳定的环境下也能够居功至伟。

开始使用 Hapijs + Socket.io

在开始代码编写之前,我们需要先搭建一个 Node.js 服务。可以通过执行以下命令创建一个基础的 Hapijs 项目:

使用 Hapijs 创建服务器的代码如下:

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

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

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

此时运行 node index.js 就可以看到服务器监听在 localhost:3000 上了。

接着,让我们继续添加 Socket.io 到项目中:

引入 Socket.io 并且将其绑定在 Hapijs 服务器上如下:

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

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

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

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

在这里,我们将服务器的 listener 传递给 Socket.io,使得 Socket 可以监听和返回从客户端发来的消息。

现在,我们已经搭建好了一个基础的 Hapijs 服务,并且引入了 Socket.io。接下来就是实现实时通信的核心了。

为了能够进行实时通信,在客户端和服务器之间需要交换信息,而这本质上是依赖于 Socket.io 提供的几个核心事件。

在客户端,我们可以使用一些方法从服务器获取信息(例如,获取当前在线用户列表):

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

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

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

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

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

其中,我们使用 io.connect() 来建立连接,然后在 connect 事件中,我们可以获取到当前在线用户列表。当服务器和客户端之间建立了连接之后,我们使用 socket.emit() 向服务器发送指令,然后服务器会返回相应的信息。

在服务器端,我们可以利用 socket.on() 方法监听服务器和客户端之间的消息:

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

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

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

在这里我们监听了 connection 事件来监听服务端和客户端之间的连接事件。当有客户端连接上服务器时,它所对应的 socket.id 会被记录下来。之后我们可以根据该客户端的 id 来进行信息的交互。比如,我们可以在 getOnlineUsers 事件中向客户端发送一个包含当前所有在线用户的消息。

这样,我们就可以完成一个基本的实时通信网站了。完整的代码如下:

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

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

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

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

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

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

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

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

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

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

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

结语

在这篇教程中,我们介绍了如何使用 Hapijs 和 Socket.io 两个工具库,实现了一个简单的实时通信网站。通过本文,读者可以了解到 Hapijs 和 Socket.io 的基本使用方法,并且熟悉了它们如何协作和提供实时通信服务。如果想深入学习和研究,可以自行测试、学习并发挥自己的想象力,构建更多的功能和应用。

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

纠错
反馈