Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Веб-программирование > Flash

Flash Создание интерактивных Веб-приложений

Ответ
 
Опции темы
Старый 03.12.2014, 18:38   #1
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 25.11.2009
Сообщений: 312
Написано 35 полезных сообщений
(для 95 пользователей)
Node.js тайм-аут соединения

Дело вот в чем: есть серверная сторона node.js и клиентская action scrip 3. Все хорошо работает, подключаюсь клиентом, создаю комнату, вхожу вторым клиентом в эту комнату - играем. Когда кто-то из клиентов выходит по каким-то причинам(по собственному желанию или интернет оборвало) срабатывает слушатель на серверной части
socket.on('close', function() {"какие-то действия"})
и дальше выполняются нужные действия для удаления клиента и комнаты. Но, когда подключаюсь двумя клиентами к комнате и ничего не трогаю минут 15, то соединения обрываются и слушатель
socket.on('close', function() {"какие-то действия"})
не срабатывает, следовательно не могу удалить не клиентов из списка клиентов и комната остается висеть. В чем может быть дело и как все-таки узнать, когда эти клиенты теряют связь с сервером? Спасибо, за любую информацию
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 03.12.2014, 19:31   #2
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Node.js тайм-аут соединения

Имел подобную проблему когда на .Net писал сетевую часть с TCP.
Решением было переодически слать ping плиенту, если не отвечает или не удалось послать - принудиетльно отрубаем клиента. Слал каждую секунду каждому клиенту.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
KingMaks (04.12.2014), pax (04.12.2014)
Старый 03.12.2014, 22:52   #3
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 25.11.2009
Сообщений: 312
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: Node.js тайм-аут соединения

Сообщение от moka Посмотреть сообщение
Имел подобную проблему когда на .Net писал сетевую часть с TCP.
Решением было переодически слать ping плиенту, если не отвечает или не удалось послать - принудиетльно отрубаем клиента. Слал каждую секунду каждому клиенту.
Как-то не хотелось лишний раз сервер нагружать, и так сообщений много передается в двух направлениях, а тут еще проверка, ну пока другого выхода не вижу, спасибо, попробую.
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 03.12.2014, 23:22   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Ответ: Node.js тайм-аут соединения

Мысли
Я не скажу за ноду, но если кодить на ц\цпп с чистыми сокетами, то разные причины обрыва проверяются по-разному.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Функция recv возвращает или кол-во прочитанных байт, либо 0 если сокет корректно закрылся (судя по-всему это ты и проверяешь), но ещё функция может вернуть SOCKET_ERROR (отрицательный код), индицирующий ошибку, конкретику по которой можно узнать через WSAGetLastError. И в коде это было две ветки алгоритма обработки закрытия. Быть может, ваше программное средство, имеет аналогии в интерфейсах?
Пинг действительно кажется не очень деликатным решением: не пинг-ом единым ICMP наполнен - наверняка сетевой интерфейс получает (сам генерирует) сообщение о проблеме, просто его надо как-то проверить.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KingMaks (04.12.2014)
Старый 04.12.2014, 02:06   #5
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 25.11.2009
Сообщений: 312
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: Node.js тайм-аут соединения

impersonalis, да есть еще
socket.on('error'
и
socket.on('data'
Ни один из слушателей не срабатывает. Запустил нод сервер на своем компьютере, минут 40 ждал, так соединение и не потерялось. Как только запускаю на VPS, то 15 минут примерно и все, соединение пропало, сервер ничего в лог не выводит
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 04.12.2014, 02:12   #6
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Node.js тайм-аут соединения

Глянь несколько ссылок:
http://nodejs.org/api/net.html#net_s...initialdel ay
Еще `timeout` и `end` евенты.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KingMaks (04.12.2014)
Старый 04.12.2014, 04:09   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,496
Написано 2,953 полезных сообщений
(для 5,217 пользователей)
Ответ: Node.js тайм-аут соединения

Без пинга нормально не отловить, сталкивался с этим, когда писал TCP сеть на NodeJS <=> Unity. Плюс пинг полезен, можно считать среднее время передачи пакетов и учитывать это время для интерполяции/экстраполяции. Ну и нагрузка на самом деле мизерная от него. Можно проверять время последней операции приема передачи время от времени. Если больше какого-то времени - слать пинг. Тогда будет нагрузка еще меньше.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
KingMaks (04.12.2014), moka (04.12.2014)
Старый 04.12.2014, 09:07   #8
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Ответ: Node.js тайм-аут соединения

Сообщение от pax Посмотреть сообщение
Без пинга нормально не отловить, сталкивался с этим, когда писал TCP сеть на NodeJS <=> Unity. Плюс пинг полезен, можно считать среднее время передачи пакетов и учитывать это время для интерполяции/экстраполяции. Ну и нагрузка на самом деле мизерная от него. Можно проверять время последней операции приема передачи время от времени. Если больше какого-то времени - слать пинг. Тогда будет нагрузка еще меньше.
Некоторые сетевые экраны блочат беспорядочный (частый, регулярный) пинг. К тому же есть опасение, что на уровнем ниже и так проверяется событие, т.е.: как бы не оказалось, что мы дублируем работу сетевого интерфейса. Ну а так-то - копейки, конечно.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.12.2014, 11:37   #9
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Node.js тайм-аут соединения

Сообщение от impersonalis Посмотреть сообщение
Некоторые сетевые экраны блочат беспорядочный (частый, регулярный) пинг. К тому же есть опасение, что на уровнем ниже и так проверяется событие, т.е.: как бы не оказалось, что мы дублируем работу сетевого интерфейса. Ну а так-то - копейки, конечно.
Ping'а на низком уровне TCP нету. Это уже от платформы/библиотеки зависит которая может сама реализует свой heartbeat в виде ping'а.
Но нагрузка на самом деле ничтожная, да и ping - это не отличимое сообщение от любых других, разница лишь в том что оно переодическое.
Никакой маршрутизатор или провайдер не будет блочить подобный трафик, т.к. во первых с точки зрения сети - он редкий (раз в секунду), и с точки зрения данных, он не разлечим от остального трафика, и может быть на самом деле логикой, это было бы накладно и не целесообразно фильтровать и анализировать трафик чтобы что-то там блокировать на уровне сетевой инфраструктуры.
(Offline)
 
Ответить с цитированием
Старый 04.12.2014, 12:24   #10
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 26.06.2009
Адрес: Рязань-Москва
Сообщений: 458
Написано 389 полезных сообщений
(для 1,040 пользователей)
Ответ: Node.js тайм-аут соединения

Это же ICMP протокол, TCP тут не при чем. Некоторые блочат ICMP-сообщения с типом 8(как раз пинг), правда нигде не видал чтобы блокировка производилась автоматически при флуде.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (04.12.2014)
Старый 04.12.2014, 12:50   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Ответ: Node.js тайм-аут соединения

2moka: DStalk уже ответил. Про icmp как часть стека TCP/IP я писал выше.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.12.2014, 13:49   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,496
Написано 2,953 полезных сообщений
(для 5,217 пользователей)
Ответ: Node.js тайм-аут соединения

Я не про настоящий пинг. А про обычное сообщение от сервера клиенту по установленному соединению. Если не слать пакеты с сервера на Node JS, то некоторые сокеты остаются в состоянии "подключен" пока реально не смогут передать данные и не вызовут исключение. Т.е. не приходит никаких эвентов что клиент отключился давно.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (04.12.2014)
Старый 04.12.2014, 16:37   #13
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Node.js тайм-аут соединения

Аналогично, речь и не шла о использовании низкого уровня ping'а. А речь идет о отсылке нормального сообщения, которое по логике приложение имеет роль heartbeat'а или ping'а.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 11:18.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com