私は NodeJ を実行している 3 つのサーバーを持っており、Redis (1 つのマスター、2 つのスレーブ) で相互に関連付けられています。
私が抱えている問題は、単一のサーバーでシステムを実行すると正常に動作することですが、それを 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;
};