我有 3 台运行 NodeJ 的服务器,它们与 Redis 相互关联(1 台主机,2 台从机)。
我遇到的问题是在单个服务器上运行系统工作正常,但是当我将它扩展到 3 个 NodeJS 服务器时,它开始丢失消息并且系统变得不稳定。
我的负载均衡器不接受粘性会话。因此,每次来自客户端的请求到达它时,它们都可以转到不同的服务器。
我将所有 NodeJS 服务器指向 Redis Master。
看起来 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;
};