Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2013, 18:46
Аспирант
Отправить личное сообщение для IgorN Посмотреть профиль Найти все сообщения от IgorN
 
Регистрация: 26.11.2008
Сообщений: 35

Socket.io в disconnect получить инфу о событии
Всем привет!

Можно ли как то понять, почему произошол дисконект? Либо сделать какой то контролируемый дисконект?
Например: юзер перегрузил страницу, это приводит к дисконекту, хотя хотелось бы восстановить его коннект и данные.
Или юзер перешол на другую страницу, закрыл браузер, у него вырубился комп. В этом случае тож охото сделать адекватные действия, уведомить кого то, дернуть что то и т.д.

Наставьте на путь истенний плиз
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2013, 20:10
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

например, можно создать в паяти массив объектов, где держать в качестве полей username и socketID.
когда устанавливаем соединение - ждем пакет с именем пользователя и пихаем в глобальный массив ид сокета и юзернейм.
когда произошел дисконнект - в глобальном массиве юзернейм остается, но его сокет ид обнуляется.
при новом соединении проверяем, есть ли этот пользователь в глобальном массиве, и если да - то устаналиввем в массиве этот новый сокет ид .

в глобальный массив можно внести еще и время последнего подключения, чтобы впоследствии чистить этот массив по таймауту.
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2013, 20:19
Аспирант
Отправить личное сообщение для IgorN Посмотреть профиль Найти все сообщения от IgorN
 
Регистрация: 26.11.2008
Сообщений: 35

Спасибо! Данные сессии уже храню. И возникла похожая идея. Т.е. таймаут буду вешать сразу при дисконекте например на 15 сек. Через 15 сек, проверять.
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2013, 11:21
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

а в чём проблема, собсна?
на сервере -
socket.on('disconnect', function () {
...

и вуаля.
в нутре и функцэи использовать setTimeout чтобы не рвать коннекшны понапрасну - так, переходя со страницы на страницу, клиент последовательно посылает на сервер сообщения disconnect и connection с небольшой разницей во времени - ну, скажем, в районе двух секунд.
поэтому сервер должен ждать это время, чтобы различить - загружает клиент новую страницу или закрыл страницу совсем.

фактически, я хранил информацию о sessionID (и не только) всех клиентов, чтобы интерактивно выводить на каждой странице кто сейчас онлайн. подобное делать несокетами было бы ой как геморно и неправдоподобно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск