Node.js:使用 socket.io 集群
Node.js: using socket.io with cluster
我想将 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);
}
RedisStore
是 connect-redis
模块添加的功能,而不是 redis
。要解决这个问题,您只需将 var RedisStore = require('redis')
更改为 var RedisStore = require('connect-redis')
.
RedisStore
构造函数期望得到一个带有redis
属性 的对象,它应该是一个redis 客户端(connect-redis
API Docs).
我想将 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);
}
RedisStore
是 connect-redis
模块添加的功能,而不是 redis
。要解决这个问题,您只需将 var RedisStore = require('redis')
更改为 var RedisStore = require('connect-redis')
.
RedisStore
构造函数期望得到一个带有redis
属性 的对象,它应该是一个redis 客户端(connect-redis
API Docs).