Hier ist mein Servercode:Knotencluster mit socket.io und expressjs
Ich versuche Cluster mit socket.io und expressjs zu verwenden. Ich teste das auf meinem Quad-Core-Desktop.
var cluster = require('cluster')
var numCPUs = require('os').cpus().length
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork()
}
console.log(new Date());
}
else {
// get required modules
var connect = require('connect');
var express = require('express');
var mongo = require('mongodb');
var MongoStore = require('connect-mongo')(express);
var server;
var redis = require('redis');
var http = require('http');
// create server object
app = exports.module = express();
function configureServer() {
//configure environments
app.configure('production', function() {
app.use(express.errorHandler());
});
//configure server instance
app.configure(function() {
app.use(express.compress())
// set jade as default view engine
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.cookieParser("refdgfd"));
app.use(express.methodOverride());
app.use(app.router);
// use express logger
});
loadModules();
}
var server = http.createServer(app).listen(80);
socket = require('socket.io').listen(server);
var RedisStore = require('socket.io/lib/stores/redis')
, pub = redis.createClient()
, sub = redis.createClient()
, client = redis.createClient();
socket.set('store', new RedisStore({
redisPub : pub
, redisSub : sub
, redisClient : client
}));
socket.configure(function() {
socket.set('log level', 1);
socket.set('transports', ['websocket']);
});
configureServer();
}
Gibt es etwas, das wirklich falsch ist?
Die Protokolle zeigen an, dass alles 4 mal passiert. Was scheint richtig. Aber die Kanalbenutzer von socket.io geben auch an, dass ich immer dann, wenn ich mich mit einer Seite verbinde, 4 mal verbinde (4 Benutzer-Sockets erstellen). Das scheint falsch zu sein. Wie behebe ich das Problem und sind andere Dinge mit meinem Code nicht in Ordnung? Vielen Dank.
Ich habe genau das gleiche Problem. Doppelte Nachrichten in Anzahl der Kerne. Ich habe alle Kombinationen ausprobiert und kein Glück. Hast du irgendeine Lösung dafür gefunden? – Maziyar