Skip to content
This repository has been archived by the owner on Aug 30, 2023. It is now read-only.

Commit

Permalink
クラスタリング時のSocket.IOでコネクションが張られない時がある場合の対処を組み込み
Browse files Browse the repository at this point in the history
  • Loading branch information
nsyee-test-member committed Nov 10, 2012
1 parent d2cca1b commit 7859f77
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 47 deletions.
11 changes: 9 additions & 2 deletions app.js
Expand Up @@ -112,7 +112,7 @@ app.configure('development', function() {
// 詳しくは -> http://www.senchalabs.org/connect/errorHandler.html
// 例外はDumpして、StackTraceも出す
//app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
logger.setLevel('ERROR');
logger.setLevel('INFO');
});

// testというモードでサーバを起動すると有効になる設定を作成
Expand Down Expand Up @@ -267,7 +267,14 @@ io.configure(function() {
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
// io.set('log level', 1);
io.set('log level', 1);
io.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
io.set('store', new SocketIoRedisStore({
redisPub: ioPub,
redisSub: ioSub,
Expand Down
57 changes: 31 additions & 26 deletions lib/controllers/socketIo.js
Expand Up @@ -10,14 +10,20 @@ var ownerClients = {}; //ハウスオーナーのSocket.ioのセッションを

exports.onConnection = function(socket) {
var logger = app.set('logger');
logger.info('##socket.io: connection');

var user = socket.handshake.session.passport.user;
var _csrf = socket.handshake.session._csrf;
var user;
var _csrf;

if (socket.handshake.session) {
user = socket.handshake.session.passport.user;
_csrf = socket.handshake.session._csrf;
}
var chatroomId = socket.handshake.query.id;
var isUrlOpen = socket.handshake.query.urlopen;

//未ログイン時は以降の処理を行わない
if (!user) { return; }
// if (!user) { return; }

//validation
try {
Expand All @@ -27,19 +33,20 @@ exports.onConnection = function(socket) {
return;
}

Chatroom.findOneById(chatroomId, function(err, chatroom) {
if (err) { logger.error(err); return; }
//socket.ioにおけるオーナーのセッションIDを識別
if (user && (user.id === chatroom.ownerId)) {
var key = isUrlOpen ? chatroomId + '/open' : chatroomId;
ownerClients[key] = socket;
}
});
// 招待機能を使わないため一時コメントアウト
// Chatroom.findOneById(chatroomId, function(err, chatroom) {
// if (err) { logger.error(err); return; }
// //socket.ioにおけるオーナーのセッションIDを識別
// // if (user && (user.id === chatroom.ownerId)) {
// // var key = isUrlOpen ? chatroomId + '/open' : chatroomId;
// // ownerClients[key] = socket;
// // }
// });

socket.on('message', function(data) {

logger.info('##socket.io: message');
//CSRF Check
if (_csrf !== data.token) {
if (_csrf && _csrf !== data.token) {
logger.error('CSRF Invalid');
return;
}
Expand All @@ -62,28 +69,26 @@ exports.onConnection = function(socket) {
Chatroom.findOneById(data.chatroomId, function(err, chatroom) {
if (err) { logger.error(err); return; }

data.userId = user.id;
data.userId = user ? user.id : data.userId;
data.ownerId = chatroom.ownerId;

if (user && data.userId) {
if (data.mode === 'create') {
if (chatroom.status !== CONST.STATUS_OPEN &&
!data.isUrlOpen) {
createEntry(socket, data);
}
else {
createChat(socket, data);
}
if (data.mode === 'create') {
if (chatroom.status !== CONST.STATUS_OPEN &&
!data.isUrlOpen) {
createEntry(socket, data);
}
else if (data.mode === 'destroy') {
destroy(socket, data);
else {
createChat(socket, data);
}
}
else if (data.mode === 'destroy') {
destroy(socket, data);
}
});
});

socket.on('disconnect', function() {
//socket.emit('message', {value: 'user disconnected'});
logger.info('##socket.io: disconnect');
});
};

Expand Down
32 changes: 23 additions & 9 deletions public/js/chatroomApp.js
Expand Up @@ -4,23 +4,36 @@
var chatroomId = $('html').data('chatroom');
var isUrlOpen = $('html').data('urlopen');
var url;
var connected = false;

if (isUrlOpen) {
url = host+'/chatrooms/'+chatroomId+'/open?id='+chatroomId+'&urlopen='+isUrlOpen;
}
else {
url = host+'/chatrooms/'+chatroomId+'?id='+chatroomId;
}
syaberi.socket = io.connect(url);

syaberi.socket = io.connect(url, {
'reconnect': true,
'reconnection delay': 300,
'max reconnection attempts': 10
});

syaberi.socket.on('connect', function() {
connected = true;
});


syaberi.socket.on('disconnect', function(client) {
connected = false;
});


$(function() {
var chatView = new syaberi.ChatView;
chatView.render();
Backbone.emulateHTTP = true;

syaberi.socket.on('connect', function() {
//console.log('client: connect');
});

syaberi.socket.on('message', function(data) {
if (data.mode === 'create') {
chatView.appendMessage(data);
Expand All @@ -29,10 +42,11 @@
chatView.destroyMessage(data);
}
});

syaberi.socket.on('disconnect', function(client) {
//console.log(client.sessionId + ' disconnected.');
});
});

setInterval(function() {
if (!connected) {
window.location.reload();
}
}, 3000);
}).call(this);
32 changes: 23 additions & 9 deletions public/js/dist/chatroom.js
Expand Up @@ -317,23 +317,36 @@
var chatroomId = $('html').data('chatroom');
var isUrlOpen = $('html').data('urlopen');
var url;
var connected = false;

if (isUrlOpen) {
url = host+'/chatrooms/'+chatroomId+'/open?id='+chatroomId+'&urlopen='+isUrlOpen;
}
else {
url = host+'/chatrooms/'+chatroomId+'?id='+chatroomId;
}
syaberi.socket = io.connect(url);

syaberi.socket = io.connect(url, {
'reconnect': true,
'reconnection delay': 300,
'max reconnection attempts': 10
});

syaberi.socket.on('connect', function() {
connected = true;
});


syaberi.socket.on('disconnect', function(client) {
connected = false;
});


$(function() {
var chatView = new syaberi.ChatView;
chatView.render();
Backbone.emulateHTTP = true;

syaberi.socket.on('connect', function() {
//console.log('client: connect');
});

syaberi.socket.on('message', function(data) {
if (data.mode === 'create') {
chatView.appendMessage(data);
Expand All @@ -342,10 +355,11 @@
chatView.destroyMessage(data);
}
});

syaberi.socket.on('disconnect', function(client) {
//console.log(client.sessionId + ' disconnected.');
});
});

setInterval(function() {
if (!connected) {
window.location.reload();
}
}, 3000);
}).call(this);
2 changes: 1 addition & 1 deletion public/js/dist/chatroom.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 7859f77

Please sign in to comment.