socket.io.session 是一个基于 Socket.IO 的 Node.js 包,用于创建带有 session 功能的实时 Web 应用程序。使用 socket.io.session 可以轻松实现将用户登录信息储存在 session 中,方便用户的管理。
安装
使用 npm 进行安装:
npm install socket.io.session --save
使用
在创建 Socket.IO 实例时,需要引入 socket.io.session 包,并通过 session 参数来启用 session 功能。同时,需要实例化一个 Redis 会话存储对象,用于存储用户 session 信息。
-- -------------------- ---- ------- ----- -- - ----------------------- ----- ------- - ----------------------------- ----- ---------- - --------------------------- ----- ------------ - ------------ ----- ------------ ----- ---- --- ----- ------- - --------- ------ ------------- --- ---------------- ------------------- -------- -- - -- -- ----------------- ----- ---- - --------------------------- ---展开代码
API
session(options)
用于创建 Session 实例。
options.store
Type: object
指定会话存储实例,例如使用 Redis 存储:
const RedisStore = require('socket.io-redis'); const sessionStore = RedisStore({ host: 'localhost', port: 6379 });
options.cookie
Type: object
指定用于存储 session ID 的 cookie 的选项,例如:
session({ cookie: { maxAge: 60000 } })
session.get(key, callback)
获取指定 key 的 session 数据。
const user = socket.session.get('user');
session.set(key, value, callback)
设置指定 key 的 session 数据。
socket.session.set('user', { id: '123', name: 'username' });
session.touch(callback)
更新 session 过期时间。
socket.session.touch();
session.save(callback)
保存 session。
socket.session.save();
示例代码
一个基于 socket.io.session 的聊天室示例:
-- -------------------- ---- ------- ----- -- - ----------------------- ----- ------- - ----------------------------- ----- ---------- - --------------------------- ----- ------------ - ------------ ----- ------------ ----- ---- --- ----- ------- - --------- ------ ------------- ------- - ------- ----- -- --- ---------------- ------------------- -------- -- - ----- ---- - --------------------------- -- ------- - -- ------------ -------------------- ------- - -- ----- -------------------- -- --------- -------------------- --------- -- - -- --------------- ----------------------------- - ----- ----- -------- -------- --- --- ---展开代码
上述代码中,首先引入 socket.io、socket.io.session、socket.io-redis 三个包,并通过 RedisStore 实例化 Redis 会话存储对象。然后创建一个 Session 实例,并在创建 Socket.IO 实例时使用。在连接建立时,如果用户未登录,则断开连接;如果用户已登录,则加入聊天室。通过监听 'message' 事件,当有用户发送聊天信息时,服务器将聊天信息广播给聊天室内的所有用户。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedb4f2b5cbfe1ea06113ad