我有3台运行NodeJs的服务器,它们通过Redis(1个主服务器,2个从服务器)相互关联。
我遇到的问题是,将系统运行在单个服务器上时工作正常,但当我将其扩展到3个NodeJS服务器时,它开始丢失消息并且系统变得不稳定。
我的负载均衡器不接受粘性会话。因此,每次来自客户端的请求到达时,它们可能会发送到不同的服务器。
我将所有NodeJS服务器都指向Redis主服务器。
看起来socket.io正在每个服务器上存储信息,并且没有与redis一起分发。
我使用的是socket.io V9,我怀疑我没有任何握手代码,这可能是原因吗?
我的配置socket.io的代码如下:
我遇到的问题是,将系统运行在单个服务器上时工作正常,但当我将其扩展到3个NodeJS服务器时,它开始丢失消息并且系统变得不稳定。
我的负载均衡器不接受粘性会话。因此,每次来自客户端的请求到达时,它们可能会发送到不同的服务器。
我将所有NodeJS服务器都指向Redis主服务器。
看起来socket.io正在每个服务器上存储信息,并且没有与redis一起分发。
我使用的是socket.io V9,我怀疑我没有任何握手代码,这可能是原因吗?
我的配置socket.io的代码如下:
var express = require('express');
var io = require('socket.io');
var redis = require('socket.io/node_modules/redis');
var RedisStore = require('socket.io/lib/stores/redis');
var pub = redis.createClient("a port", "an ip");
var sub = redis.createClient("a port", "an ip");
var client = redis.createClient("a port", "an ip");
var events = require('./modules/eventHandler');
exports.createServer = function createServer() {
var app = express();
var server = app.listen(80);
var socketIO = io.listen(server);
socketIO.configure(function () {
socketIO.set('store', new RedisStore({
redisPub: pub,
redisSub: sub,
redisClient: client
}));
socketIO.set('resource', '/chat/socket.io');
socketIO.set('log level', 0);
socketIO.set('transports', [, 'htmlfile', 'xhr-polling', 'jsonp-polling']);
});
// attach event handlers
events.attachHandlers(socketIO);
// return server instance
return server;
};