Node.js : использование сокета.ввод-вывод с кластером

#node.js #redis #socket.io #cluster-computing

#node.js #redis #socket.io #кластерные вычисления

Вопрос:

я хочу использовать сокет.ввод-вывод с помощью кластера . Это то, что я пробовал, но я получил эту ошибку :

Ошибка типа: 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);
}
 

Ответ №1:

RedisStore это функциональность, добавленная connect-redis модулем, а не redis . чтобы исправить это, вам просто нужно изменить var RedisStore = require('redis') на var RedisStore = require('connect-redis') .

RedisStore конструктор ожидает получить объект со redis свойством, и это должен быть клиент redis ( connect-redis документы API).

Комментарии:

1. Спасибо и нужно ли устанавливать базу данных redis?

2. @soroushasamiesfahan redis модуль является клиентом для работы с базой данных / сервером Redis