Сбой авторизации Socket.io websocket при кластеризации узла приложения

Вопрос: возможно ли кластеризовать приложение, которое использует Socket.io для поддержки WebSocket? Если это так, что будет лучшим способом реализации?

Я создал приложение, которое использует Express и Socket.io, основанное на Node.js. Я хотел бы включить кластеризацию, чтобы увеличить количество запросов, которые может обрабатывать мое приложение.

Следующее вызывает мое приложение, чтобы произвести ошибку рукопожатия сокета ...

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('death', function(worker) {
    console.log('worker ' + worker.pid + ' died');
  });
} else {
  app.listen(3000);  
}

Журнал консоли показывает, что socket.io запускается несколько раз.

jack@jack:~$ node nimble/app.js
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started
   info  - socket.io started

Socket.io в настоящее время настраивается в верхней части моего кода сервера, используя:

var io = require('socket.io').listen(app);

Код авторизации веб-сокета:

//Auth the user
io.set('authorization', function (data, accept) {
  // check if there's a cookie header
  if (data.headers.cookie) {
    data.cookie = parseCookie(data.headers.cookie);
    data.sessionID = data.cookie['express.sid'];

    //Save the session store to the data object
    data.sessionStore = sessionStore;

    sessionStore.get(data.sessionID, function(err, session){
      if(err) throw err;

      if(!session)
      {
        console.error("Error whilst authorizing websocket handshake");
        accept('Error', false);
      }
      else
      {
        console.log("AUTH USERNAME: " + session.username);
        if(session.username){
          data.session = new Session(data, session);
          accept(null, true);
        }else {
          accept('Invalid User', false);
        }       

      }
    })
  } else {
    console.error("No cookie was found whilst authorizing websocket handshake");
    return accept('No cookie transmitted.', false);
  }
});

Консольный журнал сообщения об ошибке:

Error whilst authorizing websocket handshake
   debug - authorized
   warn  - handshake error Error

Ответы на вопрос(1)

Ваш ответ на вопрос