繁体   English   中英

Node.js Socket.IO聊天应用程序群集服务器

[英]Node.js Socket.IO Chat Application Cluster Server

实际上,我已经尝试使用socket.io创建聊天应用程序。对于单个服务器,它工作正常。 但是当我尝试使用群集服务器创建对我不起作用时,出现错误,例如客户端未握手,客户端应重新连接,群集 Web套接字中的 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

提前谢谢。

当您将Socket.io与“群集”模块一起使用时,会发生此问题-当客户端套接字转发到与其开始握手时使用的套接字不同的客户端时,会发生-这意味着一个工作者处理了握手的前半部分,并且由另一名工人处理后半部分(因此,实际上,任何一名工人均未处理完整的握手-因此握手无效)。 您应该使用sticky-session模块来解决此问题: https : //github.com/indutny/sticky-session

另外,如果您想开箱即用地在多个内核上运行的解决方案,则可以尝试SocketCluster: http ://socketcluster.io/-免责声明:我是主要作者。 这是GitHub页面: https : //github.com/topcloud/socketcluster

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM