Socket.io redis 数据如何存储和清除
Socket.io redis How data stored and cleared
我正在使用 socket.io 在 heroku 上托管一个应用程序。它正在使用套接字,而我正在使用 heroku 4 standard 1X dynos。所以为此我使用了 redistogo 服务和 socket.io-redis 插件。它工作得很好,但我想知道 socket.io-redis 在套接字断开连接时是否也会从 redis 数据库中清除数据。 Heroku redis goto 服务只提供 20MB 的数据存储。 .请指导如何socket.io-redis插入和清除redis数据库中的数据。
假设您指的是 https://github.com/Automattic/socket.io-redis/blob/master/index.js,该插件似乎使用了 Redis 的 PubSub 功能。 PubSub 不维护 Redis 数据库中的状态,因此无需清除任何数据。
会话存储负责在套接字断开连接时清理会话。我使用 https://github.com/tj/connect-redis 作为我的会话存储。
这是一个在断开连接时正确清理套接字连接的示例。
const websocket = require('socket.io')(app.get('server'), {
transports: process.env.transports
})
websocket.setMaxListeners(0)
websocket.adapter(require('socket.io-redis')({
host: process.env.redis_host,
port: process.env.redis_port,
key: 'socket_io',
db: 2
}))
websocket.use((socket, next) => {
app.get('session')(socket.request, socket.request.res || {}, next)
})
websocket.on('connection', socket => {
var sess = socket.request.session
socket.use((packet, next) => {
if(!socket.rooms[sess.id]) {
socket.join(sess.id, () => {
websocket.of('/').adapter.remoteJoin(socket.id, sess.id, err => {
delete socket.rooms[socket.id]
next()
})
})
}
})
socket.on('disconnecting', () => {
websocket.of('/').adapter.remoteDisconnect(sess.id, true, err => {
delete socket.rooms[sess.id]
socket.removeAllListeners()
})
})
})
我正在使用 socket.io 在 heroku 上托管一个应用程序。它正在使用套接字,而我正在使用 heroku 4 standard 1X dynos。所以为此我使用了 redistogo 服务和 socket.io-redis 插件。它工作得很好,但我想知道 socket.io-redis 在套接字断开连接时是否也会从 redis 数据库中清除数据。 Heroku redis goto 服务只提供 20MB 的数据存储。 .请指导如何socket.io-redis插入和清除redis数据库中的数据。
假设您指的是 https://github.com/Automattic/socket.io-redis/blob/master/index.js,该插件似乎使用了 Redis 的 PubSub 功能。 PubSub 不维护 Redis 数据库中的状态,因此无需清除任何数据。
会话存储负责在套接字断开连接时清理会话。我使用 https://github.com/tj/connect-redis 作为我的会话存储。
这是一个在断开连接时正确清理套接字连接的示例。
const websocket = require('socket.io')(app.get('server'), {
transports: process.env.transports
})
websocket.setMaxListeners(0)
websocket.adapter(require('socket.io-redis')({
host: process.env.redis_host,
port: process.env.redis_port,
key: 'socket_io',
db: 2
}))
websocket.use((socket, next) => {
app.get('session')(socket.request, socket.request.res || {}, next)
})
websocket.on('connection', socket => {
var sess = socket.request.session
socket.use((packet, next) => {
if(!socket.rooms[sess.id]) {
socket.join(sess.id, () => {
websocket.of('/').adapter.remoteJoin(socket.id, sess.id, err => {
delete socket.rooms[socket.id]
next()
})
})
}
})
socket.on('disconnecting', () => {
websocket.of('/').adapter.remoteDisconnect(sess.id, true, err => {
delete socket.rooms[sess.id]
socket.removeAllListeners()
})
})
})