Есть вполне себе обычная структура на node.js + socket.io:
io.on('connection', function (socket) {
socket.on('add user', function (hash, interlocutor_id) {
});
socket.on('private message', function (from, msg) {
});
socket.on('disconnect', function () {
});
});
Значит смысл в небольшом чате со своими кастомными запросами. Все работает так:
Заходит пользователь, получаем его сокет, проверяем есть ли его user_id в массиве, если нет создает комнату и запихиваем его туда. Если он есть в массиве, обновляем ему сокет.
Значит все работает хорошо до момента, когда я начинаю штормить сервер ф5. Доесть кидаю не большую дос атаку зажатием ф5. В какой-то момент после 20 - 30 запроса событие disconnect просто перестает отрабатывать.
Как раз в этом событии происходит чистка комнат. И получается что комнаты постоянно пополняются дублями.
На стековерфлоу нашел похожий вопрос, где посоветовали сделать так:
var socket = io.connect(':8080', {'sync disconnect on unload': true});
Собственно проблема не решена. Событие disconnect отваливается и отваливается с концами на все последующие запросы, как быть?