实际上我尝试使用socket.io创建聊天应用程序 对于单个服务器,它工作正常。但是当我尝试使用群集服务器创建时 没有为我工作它的错误就像 客户端没有握手客户端应重新连接,群集中的socket.io 网络套接字无效
这些错误在控制台中不断给出
有人可以帮我继续socket.IO
的集群服务器var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
var sio = require('socket.io');
var server;
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('online', function(worker) {
console.log('A worker with #' + worker.id);
});
cluster.on('listening', function(worker, address) {
console.log('A worker is now connected to ' + address.address + ':' + address.port);
});
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
}
else {
server = http.createServer(function(req, res) {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
_socketServer();
}
var _socketServer = function() {
io = sio.listen(server);
io.set("log level", 1);
io.sockets.on("connection", function (socket) {
});
});
我收到这样的错误
客户端没有握手的客户端应重新连接,群集中的socket.io
预感谢。
答案 0 :(得分:1)
当您将Socket.io与群集模块一起使用时会发生此问题 - 当客户端套接字转发给与启动握手时不同的工作者时会发生这种情况 - 这意味着一个工作者处理上半部分握手和另一个工人处理后半部分(因此实际上,工作人员都不处理完全握手 - 因此握手无效)。您应该使用粘性会话模块来解决此问题:https://github.com/indutny/sticky-session
或者,如果您想要一个只在多个核心上运行的解决方案,您可以尝试SocketCluster:http://socketcluster.io/ - 免责声明:我是主要作者。这是GitHub页面:https://github.com/topcloud/socketcluster