я хочу использовать socket.io с кластером. Это то, что я пытался, но я получил эту ошибку:
TypeError: RedisStore не является конструктором
const app = express()
const redis = require('redis')
var cluster = require('cluster'),
numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
//master process - fork children
for (var i = 0; i < numCPUs; i++) {
cluster.fork()
}
}
else {
var RedisStore = require('redis')
, pub = redis.createClient()
, sub = redis.createClient()
, client = redis.createClient();
var io = require('socket.io').listen(5000, {
'store': new RedisStore({
redisPub: pub
, redisSub: sub
, redisClient: client
}),
});
io.sockets.on('connection', function (socket) {
// all socket.on('eventname'... things go here
});
const http = require('http')
http.createServer(app).listen(4000);
}
RedisStore
— это функциональность, добавленная модулем connect-redis
, а не redis
. чтобы исправить это, вам просто нужно изменить var RedisStore = require('redis')
на var RedisStore = require('connect-redis')
.
RedisStore
конструктор ожидает получить объект со свойством redis
, и это должен быть клиент Redis (Документация по API connect-redis).
Модуль redis
@soroushasamiesfahan — это клиент для работы с базой данных/сервером Redis.
Спасибо, а нужно ли устанавливать базу данных Redis?