前言
Socket.io 提供了 Adapter 接口,可以让开发者使用各种 NoSQL 数据库来存储 WebSocket 的会话信息。在这个方案中,我们将介绍 @yawetse/socket.io-adapter-mongo,一个基于 MongoDB 实现的 Adapter,它可以持久化保存 WebSocket 的会话信息,方便开发者做一些 WebSocket 相关的业务场景。本文将详细介绍如何使用 @yawetse/socket.io-adapter-mongo。
安装
使用 npm 安装 @yawetse/socket.io-adapter-mongo:
npm install @yawetse/socket.io-adapter-mongo
使用方法
引入模块
在工程中使用 @yawetse/socket.io-adapter-mongo,首先引入相关模块:
const adapter = require('@yawetse/socket.io-adapter-mongo');
配置参数
在使用时,需要将 MongoDB 的连接字符串和选项以参数传入 MongoDBAdapter 构造函数中,如下所示:
-- -------------------- ---- ------- ----- ------- - -------------------------------------------- ----- ------------ - --------------------- ----- -------- - ------------------------------------- ----- ------- - - ---------------- ----- ------------------- ---- -- ----- ------------ - --- ---------------------- ---------
其中,选项包括 useNewUrlParser 和 useUnifiedTopology,这两个参数是必须的,且可根据需求自行变更。
使用 Adapter
在 Socket.io 的 Server 对象中使用 adapter:
const io = require('socket.io')(server); io.adapter(mongoAdapter);
之后就可以通过 adapter 来处理 WebSocket 的会话信息了。
示例代码
以下是一个完整的使用 @yawetse/socket.io-adapter-mongo 的简单示例,通过它可以更好的理解该 npm 包的使用方法。
-- -------------------- ---- ------- ----- ------- - -------------------------------------------- ----- ------------ - --------------------- ----- -- - ----------------------------- ----- -------- - ------------------------------------- ----- ------- - - ---------------- ----- ------------------- ---- -- ----- ------------ - --- ---------------------- --------- ------------------------- ------------------- -------- -- - -------------- ---- ------------ --- -------- - ----- ----------------------- -- -- - -------- - ------ ----------------- --------------- --- --------------- --------- ----- -- - --------------------- - - ----- -- ---------- - ------------- --------- ----- - ---- - ----------------- -- -------- ------- ---- -- -------- - --- ---
在示例代码中,我们创建了一个 Socket.io 的 Server 对象,并且引入了 @yawetse/socket.io-adapter-mongo 模块。之后我们根据上述介绍的使用方法进行实例化,然后将其传入 io.adapter()。
在客户端连接时,我们创建了一个 isOnline 变量表示该用户当前是否在线。当用户关闭浏览器时,该 isOnline 变量会被设置为 false,表示该用户已经下线了。当某个用户发送消息时,我们判断其 isOnline 变量,如果为 true ,则使用 io.emit() 来向所有在线用户发送消息;如果为 false,则说明该用户已经下线,此时我们不发送消息,而是将消息记录下来。这样,当该用户上线时,我们就可以将其离线消息发送给他。
总结
通过本文,相信大家已经对 @yawetse/socket.io-adapter-mongo 这个 npm 包的使用方法有了一定的了解。该 npm 包可以使开发者方便的将 WebSocket 的会话信息存储于 MongoDB 中,从而实现一些比较复杂的业务场景。最后,希望本文能为大家提供帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/95344