npm包ejov-connect使用教程

阅读时长 12 分钟读完

在Web前端开发中,我们常常需要使用到各种JavaScript库或框架,而这些库或框架中的组件往往需要支持服务端的数据接口,这时候就需要使用到一些连接两端的桥梁。ejov-connect就是其中非常实用的一种。

1. ejov-connect介绍

ejov-connect是一个基于Node.js平台的中间件,它作为一个连接两端的通信桥梁,充分利用websocket长连接技术,提供了一种简单的API,实现了前端和后端的交互。

ejov-connect具有以下特性:

  1. 支持websocket、HTTP协议的长连接、短连接。
  2. 支持事件上报、接收的实时性。
  3. 支持自定义协议,方便扩展。
  4. 支持授权验证、状态监控。

2. ejov-connect安装与使用

使用npm命令行工具,我们可以很方便地将ejov-connect安装到我们的项目中。

npm install ejov-connect

安装完成后,我们就可以在项目中使用ejov-connect了。

上述代码中,我们先引入了ejov-connect,并将其赋给了ejovConnect。接着使用express的use方法,将ejovConnect作为中间件插入到应用程序中,这样我们就完成了ejov-connect的安装与使用。

接下来,我们将讲解ejov-connect的核心API。

3. ejov-connect使用示例

ejov-connect提供了一系列API,方便我们实现前后端的交互。现在我们将通过一个实例来演示它的使用方法。

在这个示例中,我们将需要用到ejov-connect作为服务端的通讯桥梁,同时我们还需要使用一个WebSocket客户端来进行测试。

3.1 服务端示例

以下是一个完整的node.js服务端示例,它使用ejov-connect来实现客户端和服务端之间的通信,将客户端发送的消息转发给所有连接的客户端。

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

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

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

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

3.2 WebSocket客户端示例

在我们使用前端框架时,通常会与服务器交互。以下是一个基于WebSocket的简单客户端,它首先向服务器发送了一条消息,然后在接收到服务端回应之后,再将服务器发送的消息打印出来。

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

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

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

现在我们可以启动服务端代码,并运行WebSocket客户端代码了。如果一切正常,你会看到客户端会输出“Received: Hello Server!”。

4. ejov-connect的使用指南与深度解析

4.1 ejovConnect(options)

我们只需要在Node.js应用程序中添加app.use(ejovConnect(options))即可启用ejov-connect的中间件。options参数可选,它包含以下属性。

  • path:WebSocket端点的URL,即要监听的URL,默认为/websocket
  • serveClient:指定是否提供客户端脚本,为true时客户端文件将从ejov-connect服务上的/socket.io/socket.io.js获取,否则需要手动提供。默认为true
  • pingInterval:每隔pingInterval毫秒向客户端发送心跳包以保持连接。默认值为25000。
  • pingTimeout:在pingTimeout毫秒没有收到客户端的响应时断开连接。默认值为60000。
  • cookie:启用cookie以允许服务器从中获取到客户端身份。默认情况下禁用cookie。

4.2 namespacesocket

namespace是可以连接到的分离的传输通道,类似于命名空间。默认情况下,客户端总是连接到/命名空间/ 下。一个namespace会有一个socket列表,用于存储连接到该namespace下的所有socket。因此,可以将socket看作是连接到某个namespace下的客户端对象。

当连接建立时,每个socket对象将用一个唯一的ID(GUID)进行标识。可以通过socket.id访问socket的ID。

namespace对象提供了以下方法。

4.2.1 on(event, callback)

通过on方法,我们可以为namespace对象添加一个回调函数,用于监听某一个事件(如connectiondisconnect)。当有与客户端的socket连接或断开连接时,将会触发此事件。

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

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

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

4.2.2 emit(event, ...args)

emit方法用于向所有连接到namespace下的客户端发送一个事件。它将一个事件名和一些数据作为参数来调用,如果您只想向一个客户端发送数据,请使用socket.emit()方法代替。

4.2.3 to(room)

to方法可以用于将消息发送给特定的房间,房间是单个客户端的任意聚集,你可以随时加入和离开房间。

4.2.4 join(room)

join方法让socket加入指定的房间,在房间名相同的情况下,多次调用join不会增加client在房间中的数量。

4.2.5 leave(room)

leave方法从socket中删除指定的房间,如果不在房间中,这个方法调用没有影响。

4.3 socket对象

当客户端连接时,服务器将为该客户端创建一个socket对象。socket对象表示一个活跃的WebSocket连接,它可以在客户端和服务器之间交换任意数据。

常用socket的方法如下。

4.3.1 on(event,callback)

当从客户端收到指定的event时,会触发回调函数callback,callback接收一个data参数数据,数据可以是字符串或者 Buffer 对象。

4.3.2 emit(event, ...args)

emit方法让socket向此客户端(self)或所有已连接到特定命名空间(broadcast)的所有客户端发送一个特定事件。此方法接收事件名和一些可选数据作为参数,如果要向其他客户端发送消息,则需要在方法后添加回调函数,以便在所有其他客户端已经接收到消息之后,返回一个应答消息。

4.3.3 broadcast.emit(event, ...args)

broadcast.emit方法让socket向所有其他连接到该命名空间的客户端广播一个事件。broadcast.emit是将一个事件名和一些可选择的数据作为参数,只会广播到没有将此数据的响应监听器注册到该 namespace 下的客户端。

4.3.4 disconnect()

disconnect()方法用于关闭socket和远程客户端之间的连接。

4.4 多命名空间

可以通过 ejovConnect.server 来创建立即自己的命名空间,通过在其上注册的回调函数完成命名空间的聚合处理,管理多个命名空间。

下面代码展示创建多个命名空间的简单示例。

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

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

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

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

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

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

本示例创建了两个命名空间,分别是chat和news。通过on()方法监听connection事件,一旦新连接建立,就可以执行相应的操作。

4.5 私有通信

私有通信是我们经常需要用到的。在ejov-connect中,可以使用socket.join(room)socket.leave(room)方法将客户端加入到房间中,然后使用io.to(room)来向房间中的所有客户端广播消息。

在以下示例中,我创建了两个房间room1和room2,向其加入了不同的客户端。使用io.to(room_name).emit()向指定的房间中的所有客户端广播消息。

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

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

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

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

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

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

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

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

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

4.6 验证

当使用websocket进行连接时,我们需要对客户端进行身份验证。ejov-connect提供了身份验证的方法。

验证方法如下:

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

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

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

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

当客户端连接服务器时,可以使用socket.emit('auth', data)方法对其进行身份验证。如果验证无误,则表示客户端鉴权成功。

4.7 心跳

在进行长连接时,为了保持长连接的稳定,需要使用心跳。ejov-connect提供了心跳机制,用于在客户端和服务端之间保持连接。

如下是使用心跳机制的示例代码:

在上面的代码中,我们使用set()方法来设置心跳机制的参数。‘heartbeat interval’表示要求客户端每隔5秒向服务器发送一次心跳请求,而‘heartbeat timeout’表示如果服务器在15秒内没有收到任何消息,则断开与客户端的连接。

5. 小结

本文介绍了ejov-connect的特点、安装与使用方法以及常用API。ejov-connect是一款优秀的Node.js中间件,它能帮助我们轻松地搭建WebSocket服务,实现前后端的实时通信。掌握ejov-connect的使用方法,有助于我们开发更强大的实时Web应用。

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

纠错
反馈