|
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
![]()
Сообщение
#1
|
|
![]() Начинающий ![]() Группа: Пользователи Сообщений: 28 Регистрация: 23.3.2010 Из: Пенза Пользователь №: 6 428 Спасибо сказали: 22 раза ![]() |
Может уже есть такая тема, сорри если создал дубль или тема - полный бред.
По техническим причинам, напр. со стороны провайдера иногда рвётся соединение с хабом, и в результате юзер снова подключается к хабу и видит сообщение: "Ваш ник занят...". Причём занят им самим же. После такого события прога-клиент, например GreyLink, перестаёт автоматически подключаться к хабу, пока юзер это не сделает вручную, как гласит статистика, это произойдёт только при следующем запуски клиента юзером. Так вот, вопрос. Можно ли как-то пресечь такую ситуацию со стороны хаба? |
|
|
![]()
Сообщение
#2
|
|
![]() Главный ра******й тут... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз ![]() |
Нормальные клиенты подключаются к хабу через какой-то интервал, после обрыва, и так постоянно, 1 проблема в клиенте. Выкидывайте вы уже этот грейлинк.
У тебя какая ОС? Если линукс, то возможно тебе помогут настройки, устанавливающие таймаут для отвалившегося сокета. Но более подробно тебе смогут рассказать только линуксойды или мануалы. |
|
|
![]()
Сообщение
#3
|
|
![]() Продвинутый участник ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 155 Регистрация: 11.1.2009 Пользователь №: 1 772 Спасибо сказали: 29 раз ![]() |
Вопрос такой уже поднимался - хаб думает, что клиент работает нормально, если от него не поступил сигнал разрыва подключения.
Как исправить? На своем компе ты можешь сделать только регистрацию ника на хабе, больше ничего. Вход юзера с паролем обрывает созданное ранее соединение. Очень нехорошо получается, если загружаешь клиентов с нулевым временем ожидания перед подключнием из разных мест (2 грейлинка будут воевать между собой долго и упорно). Хотя в любом случае задержка должна быть, желательно увеличивающаяся после каждой неудачной попытки.. А на сервере..Тут, наверное, если получится придумать скрипт, который при проверке ника нового юзера будет вместо быстрого ValidateDenide при наличии такого же ника делать сначала некую проверку-пинг (запрос IP, что-ли) соединения.. Взял на себя смелость процитировать грамотного специалиста =) : Цитата [2010-09-17 - 17:30:41] <setuper_work> по поводу отключения от хаба [2010-09-17 - 17:30:47] <setuper_work> раз был такой разговор [2010-09-17 - 17:31:00] <setuper_work> есть 2 типа отключения [2010-09-17 - 17:31:06] <setuper_work> корректное и некорректное ... [2010-09-17 - 17:31:36] <setuper_work> о некорректном отключении хаб узнаёт по ошибкам в сокете .. [2010-09-17 - 17:32:11] <setuper_work> при корректном отключении клиент отсылает на хаб пустую команду [2010-09-17 - 17:32:57] <setuper_work> под пустой командой подразумевается не пустая команда протокола NMDC, и даже не пустая строка [2010-09-17 - 17:33:07] <Alexey> setuper_work: %z? [2010-09-17 - 17:33:21] <setuper_work> пустая команда - это 0 байт [2010-09-17 - 17:34:04] <setuper_work> это протокол tcp.шз [2010-09-17 - 17:34:11] <setuper_work> *tcp/ip [2010-09-17 - 17:34:53] <setuper_work> поэтому если пингер корректно закрывает сокет, то хаб должен корректно разъединить пигнера [2010-09-17 - 17:35:22] <setuper_work> в противном случае пингер не уйдёт с хаба Одна из тем на форуме - http://mydc.ru/topic1868.html Кстати, на каком-то из крупных хабов (в топ 10 "нашего" хаблиста, сейчас не помню, какой именно) замечал, что ник после обрыва соединения висит больше 4-х часов. А это, по-моему, отличный способ набить счетчик юзеров.. |
|
|
![]()
Сообщение
#4
|
|
![]() Начинающий ![]() Группа: Пользователи Сообщений: 28 Регистрация: 23.3.2010 Из: Пенза Пользователь №: 6 428 Спасибо сказали: 22 раза ![]() |
Цитата(HackFesse) Кстати, на каком-то из крупных хабов (в топ 10 "нашего" хаблиста, сейчас не помню, какой именно) замечал, что ник после обрыва соединения висит больше 4-х часов. А это, по-моему, отличный способ набить счетчик юзеров.. Меня интересуют "живые юзеры" а не накрутка шары и количестваЦитата(HackFesse) А на сервере..Тут, наверное, если получится придумать скрипт, который при проверке ника нового юзера будет вместо быстрого ValidateDenide при наличии такого же ника делать сначала некую проверку-пинг (запрос IP, что-ли) соединения.. Соответственно, возникает вопрос, есть ли в NMDC безобидная команда, требующая немедленного ответа от клиента (наверно логично, что если ответа не будет, хаб отключит юзера, просто хочется копнуть глубже) ?Цитата(Nickolya) У тебя какая ОС? Если линукс, то возможно тебе помогут настройки, устанавливающие таймаут для отвалившегося сокета. Но более подробно тебе смогут рассказать только линуксойды или мануалы. Windows и пока переход на OpenSource не предвилится... ![]() |
|
|
![]()
Сообщение
#5
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Современные клиенты пингуют хабы, отсылая пустую команду (один единственный символ | в сообщении). Пинг происходит примерно раз в 3-4 минуты.
Хаб же отключает пользователя по 2 причинам:
Во втором случае действия зависят от реализации сокет-интерфейса ОС. В винде при попытке отослать данные в "мертвый сокет" возвращается ошибка, по которой хаб и удаляет пользователя. Однако существует ряд случаев, когда ошибка может не возникать очень долго и хаб будет думать, что клиент ещё "жив". Возможен случай, когда хаб пытается что-то отослать клиенту, но из-за каких-то неполадок в сети отправленные пакеты теряются, в таком случае хаб будет постоянно пытаться отослать пакеты, не получая никакого ответа, а так как TCP протокол предполагает подтверждение или опровержение доставки пакетов, то хаб будет держать пользователя, пока не получит отказ. Что касается 4 часов, то это keep alive для сокетов, то есть после определенного времени бездействия система пытается проверить состояние соединения средствами протокола tcp. Система отправляет пинги через некоторый промежуток времени, и если после определенного количества пингов не было получено ни одного ответа от клиента, то клиент считается умершим и сокет закрывается системой. |
|
|
![]() ![]() |
Похожие темы
![]() |
Сейчас: 8.9.2024, 2:55 |