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

Posted

技术标签:

【中文标题】Node.js Socket.IO 聊天应用集群服务器【英文标题】:Node.js Socket.IO Chat Application Cluster Server 【发布时间】:2014-06-06 08:54:49 【问题描述】:

实际上我已经尝试使用 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

提前谢谢。

【问题讨论】:

【参考方案1】:

当您将 Socket.io 与 Cluster 模块一起使用时会发生此问题 - 当客户端套接字转发到与开始握手时不同的工作人员时会发生此问题 - 这意味着一个工作人员处理前半部分握手和另一个工人处理后半部分(因此实际上,两个工人都没有处理完整的握手 - 所以握手无效)。您应该使用粘滞会话模块来解决此问题:https://github.com/indutny/sticky-session

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

【讨论】:

以上是关于Node.js Socket.IO 聊天应用集群服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用Node.js+Socket.IO搭建WebSocket实时应用

使用 node.js、socket.io 和 redis 的一对一聊天应用程序

如何使用 Socket.io 和 Node.js 开发大型聊天应用程序 [关闭]

Heroku 上的 Socket.io 聊天应用程序与 node.js

使用Node.js+Socket.IO搭建WebSocket实时应用转载

将简单的 Node.js 和 Socket.io 聊天应用程序与 Rails 应用程序连接起来(在 Heroku 上)