Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.10.2012, 01:04
Новичок на форуме
Отправить личное сообщение для ftalazol Посмотреть профиль Найти все сообщения от ftalazol
 
Регистрация: 10.10.2012
Сообщений: 8

Проблема с браузером на Ipad 2 ,нужна ваша помощь.
Здравствуйте, недавно написал небольшой чат на JavaScript , работает под nodeJs и библиотекой Socket.Io, на компьютере все отлично , с планшета ipad все работает хорошо до момента выхода из ждущего режима, после этого происходит дублирование данных в чате, все сообщения в чат попадают по два раза, если еще раз перевести планшет в ждущий режим и выйти из него то сообщения начнут копироваться по три раза подарят, и так далее сколько угодно. Когда планшет переходит в спящий режим он отключается, а когда выходит подключается заного и получает историю переписки каторая загружаеться в коно чата и выглядит это вот так:

00:33:31: QO32H: hi
00:33:31: QO32H: hi
00:33:39: QO32H: hello
00:33:39: QO32H: hello
00:33:50: KnsJb: Привет
00:33:50: KnsJb: Привет
00:33:56: KnsJb: Прива
00:33:56: KnsJb: Прива
00:35:29: KnsJb: Велвьврол
00:35:29: KnsJb: Велвьврол

При отправке сообщения тоже самое приходит в чат в двойном экземпляре.
Если зайти с компьютера то таких проблем нет, при каждом переводе планшета в спящий режим кол-во повторов увеличивается на один, протокол стоит websocket и планшет его поддерживает. не могу понять в чем проблема, если изменить протокол на какой то другой

socket = io.connect('http://192.168.0.59:8080', {'transports': ['websocket']});
например xhr-polling , то проблема не была замечена, но мне нужен именно вебсокет для минимизировать кол-во запросов к серверу, что бы вы мне могли посоветовать в данной ситуации.
Насколько я понимаю socket.on('message', function (msg) { вывод сообщений в чат}


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

Заранее извиняюсь если не туда задал вопрос, но так как сервер под нодой то и написал в этот раздел.


Последний раз редактировалось ftalazol, 10.10.2012 в 01:08.
Ответить с цитированием
  #2 (permalink)  
Старый 10.10.2012, 01:09
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Ну скорее всего сафари каждый раз вызывает какое то событие, например onload, когда выходит из ждущего режима. И если вы создаёте сокет именно там, то создаётся ещё одно соединение.
Ну или может быть какой то баг, внутри, который их сам дублирует. Поиграйтесь с консолью, посмотрите, что выводит.
Не искулюченно, что и в библиотеке Socket.IO дело, это надо внутри смотреть, как они там-что обрабатывают.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #3 (permalink)  
Старый 10.10.2012, 01:15
Новичок на форуме
Отправить личное сообщение для ftalazol Посмотреть профиль Найти все сообщения от ftalazol
 
Регистрация: 10.10.2012
Сообщений: 8

Еще одно соединение не создается так как имя(первые пять букв сессии совпадают) да и сообщения были бы в другом порядке, убрал онлоад и ничего не поменялось(. может он дублирует сами функции. А что за консоль и как с ней играться, просто в яваскрипте я совсем ньюби.
Ответить с цитированием
  #4 (permalink)  
Старый 10.10.2012, 01:43
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Ну тогда скорее всего проблема в библиотеке. Попробуйте поискать в ихнем баг-трекере, может быть, что то подобное у них уже было.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2012, 03:06
Новичок на форуме
Отправить личное сообщение для ftalazol Посмотреть профиль Найти все сообщения от ftalazol
 
Регистрация: 10.10.2012
Сообщений: 8

https://github.com/LearnBoost/socket.io/issues/430 - вот тут нашел что то про этот баг, Multiple sockets open after reconnect - но как я понял суть в дублировании эвентов.

Особо не полян что к чему там, так как в английском не селен, но помогло вот это :

После выхода из ждущего режима происходит реконнект и нужно проделать вот что перед тем как соединиться заново.

socket.disconnect();
socket.removeAllListeners('connect');
io.sockets = {};



Наверно есть какой то другой вариант решения проблемы, более грамотный.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь с js okapo AJAX и COMET 3 31.01.2012 04:32
Нужна помощь, если можно Fox-WNT Общие вопросы Javascript 3 27.07.2010 11:38
Очень нужна помощь с Ext JS dcbal ExtJS 1 09.07.2010 13:15
нужна помощь Sergiy Серверные языки и технологии 2 31.03.2010 20:16
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17