【发布时间】:2012-03-03 22:35:32
【问题描述】:
问题:是否可以集群使用 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);
websocket授权码:
//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
【问题讨论】:
标签: javascript node.js socket.io cluster-computing