|
Flash Создание интерактивных Веб-приложений |
03.12.2014, 21:38
|
#1
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Node.js тайм-аут соединения
Дело вот в чем: есть серверная сторона node.js и клиентская action scrip 3. Все хорошо работает, подключаюсь клиентом, создаю комнату, вхожу вторым клиентом в эту комнату - играем. Когда кто-то из клиентов выходит по каким-то причинам(по собственному желанию или интернет оборвало) срабатывает слушатель на серверной части
socket.on('close', function() {"какие-то действия"})
и дальше выполняются нужные действия для удаления клиента и комнаты. Но, когда подключаюсь двумя клиентами к комнате и ничего не трогаю минут 15, то соединения обрываются и слушатель
socket.on('close', function() {"какие-то действия"})
не срабатывает, следовательно не могу удалить не клиентов из списка клиентов и комната остается висеть. В чем может быть дело и как все-таки узнать, когда эти клиенты теряют связь с сервером? Спасибо, за любую информацию
__________________
StimuL
Maks
|
(Offline)
|
|
03.12.2014, 22:31
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.js тайм-аут соединения
Имел подобную проблему когда на .Net писал сетевую часть с TCP.
Решением было переодически слать ping плиенту, если не отвечает или не удалось послать - принудиетльно отрубаем клиента. Слал каждую секунду каждому клиенту.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
04.12.2014, 01:52
|
#3
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Node.js тайм-аут соединения
Сообщение от moka
Имел подобную проблему когда на .Net писал сетевую часть с TCP.
Решением было переодически слать ping плиенту, если не отвечает или не удалось послать - принудиетльно отрубаем клиента. Слал каждую секунду каждому клиенту.
|
Как-то не хотелось лишний раз сервер нагружать, и так сообщений много передается в двух направлениях, а тут еще проверка, ну пока другого выхода не вижу, спасибо, попробую.
__________________
StimuL
Maks
|
(Offline)
|
|
04.12.2014, 02:22
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Node.js тайм-аут соединения
Мысли
Я не скажу за ноду, но если кодить на ц\цпп с чистыми сокетами, то разные причины обрыва проверяются по-разному.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Функция recv возвращает или кол-во прочитанных байт, либо 0 если сокет корректно закрылся (судя по-всему это ты и проверяешь), но ещё функция может вернуть SOCKET_ERROR (отрицательный код), индицирующий ошибку, конкретику по которой можно узнать через WSAGetLastError. И в коде это было две ветки алгоритма обработки закрытия. Быть может, ваше программное средство, имеет аналогии в интерфейсах?
Пинг действительно кажется не очень деликатным решением: не пинг-ом единым ICMP наполнен - наверняка сетевой интерфейс получает (сам генерирует) сообщение о проблеме, просто его надо как-то проверить.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.12.2014, 05:06
|
#5
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Node.js тайм-аут соединения
impersonalis, да есть еще и Ни один из слушателей не срабатывает. Запустил нод сервер на своем компьютере, минут 40 ждал, так соединение и не потерялось. Как только запускаю на VPS, то 15 минут примерно и все, соединение пропало, сервер ничего в лог не выводит
__________________
StimuL
Maks
|
(Offline)
|
|
04.12.2014, 05:12
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.js тайм-аут соединения
Глянь несколько ссылок:
http://nodejs.org/api/net.html#net_s...initialdel ay
Еще `timeout` и `end` евенты.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.12.2014, 07:09
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.js тайм-аут соединения
Без пинга нормально не отловить, сталкивался с этим, когда писал TCP сеть на NodeJS <=> Unity. Плюс пинг полезен, можно считать среднее время передачи пакетов и учитывать это время для интерполяции/экстраполяции. Ну и нагрузка на самом деле мизерная от него. Можно проверять время последней операции приема передачи время от времени. Если больше какого-то времени - слать пинг. Тогда будет нагрузка еще меньше.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
04.12.2014, 12:07
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Node.js тайм-аут соединения
Сообщение от pax
Без пинга нормально не отловить, сталкивался с этим, когда писал TCP сеть на NodeJS <=> Unity. Плюс пинг полезен, можно считать среднее время передачи пакетов и учитывать это время для интерполяции/экстраполяции. Ну и нагрузка на самом деле мизерная от него. Можно проверять время последней операции приема передачи время от времени. Если больше какого-то времени - слать пинг. Тогда будет нагрузка еще меньше.
|
Некоторые сетевые экраны блочат беспорядочный (частый, регулярный) пинг. К тому же есть опасение, что на уровнем ниже и так проверяется событие, т.е.: как бы не оказалось, что мы дублируем работу сетевого интерфейса. Ну а так-то - копейки, конечно.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.12.2014, 14:37
|
#9
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.js тайм-аут соединения
Сообщение от impersonalis
Некоторые сетевые экраны блочат беспорядочный (частый, регулярный) пинг. К тому же есть опасение, что на уровнем ниже и так проверяется событие, т.е.: как бы не оказалось, что мы дублируем работу сетевого интерфейса. Ну а так-то - копейки, конечно.
|
Ping'а на низком уровне TCP нету. Это уже от платформы/библиотеки зависит которая может сама реализует свой heartbeat в виде ping'а.
Но нагрузка на самом деле ничтожная, да и ping - это не отличимое сообщение от любых других, разница лишь в том что оно переодическое.
Никакой маршрутизатор или провайдер не будет блочить подобный трафик, т.к. во первых с точки зрения сети - он редкий (раз в секунду), и с точки зрения данных, он не разлечим от остального трафика, и может быть на самом деле логикой, это было бы накладно и не целесообразно фильтровать и анализировать трафик чтобы что-то там блокировать на уровне сетевой инфраструктуры.
|
(Offline)
|
|
04.12.2014, 15:24
|
#10
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Node.js тайм-аут соединения
Это же ICMP протокол, TCP тут не при чем. Некоторые блочат ICMP-сообщения с типом 8(как раз пинг), правда нигде не видал чтобы блокировка производилась автоматически при флуде.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.12.2014, 15:50
|
#11
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Node.js тайм-аут соединения
2moka: DStalk уже ответил. Про icmp как часть стека TCP/IP я писал выше.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.12.2014, 16:49
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.js тайм-аут соединения
Я не про настоящий пинг. А про обычное сообщение от сервера клиенту по установленному соединению. Если не слать пакеты с сервера на Node JS, то некоторые сокеты остаются в состоянии "подключен" пока реально не смогут передать данные и не вызовут исключение. Т.е. не приходит никаких эвентов что клиент отключился давно.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.12.2014, 19:37
|
#13
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.js тайм-аут соединения
Аналогично, речь и не шла о использовании низкого уровня ping'а. А речь идет о отсылке нормального сообщения, которое по логике приложение имеет роль heartbeat'а или ping'а.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:12.
|