Автор
Тема: После снятия задачи L2.exe перс остался в игре  (Прочитано 11479 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dori

  • Постоялец
  • ***
  • Сообщений: 247
  • Karma: 33
    • Просмотр профиля
Вчера произошел странный случай (около 23 часов по МСК). Играла в 2 окна. Какую из трасс выбрала для игры теперь не припомню. Суть в том, что в один момент начало сильно подлагивать и спустя несколько минут персы вообще отказались реагировать на команды. Выход из игры (кнопкой) не смогла сделать, пришлось снять процессы L2.exe через диспетчер задач. Перезашла первым персом и вижу что второй перс в игре, на том же месте где и был ! Его можно взять в таргет, пригласить в группу и т.д. Попробовала зайти вторым персом. При первой попытке входа сообщение: "Акаунт уже используется". Зашла со второй попытки. Времени с момента снятия задачи до запуска первого перса прошло около 3-х минут.  Возможно выставлены какие-то тайминги на сервере для определения присутсвия акаунта в игре, или тут чтото другое ?

Оффлайн arutyun

  • Ветеран
  • *****
  • Сообщений: 509
  • Karma: 31
  • Клан бредовых идей Delirium
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #1 : 01 Октябрь 2013, 08:50:25 »
Вчера произошел странный случай (около 23 часов по МСК). Играла в 2 окна. Какую из трасс выбрала для игры теперь не припомню. Суть в том, что в один момент начало сильно подлагивать и спустя несколько минут персы вообще отказались реагировать на команды. Выход из игры (кнопкой) не смогла сделать, пришлось снять процессы L2.exe через диспетчер задач. Перезашла первым персом и вижу что второй перс в игре, на том же месте где и был ! Его можно взять в таргет, пригласить в группу и т.д. Попробовала зайти вторым персом. При первой попытке входа сообщение: "Акаунт уже используется". Зашла со второй попытки. Времени с момента снятия задачи до запуска первого перса прошло около 3-х минут.  Возможно выставлены какие-то тайминги на сервере для определения присутсвия акаунта в игре, или тут чтото другое ?

Могу конечно ошибаться, но думаю что вполне логично когда при принудительном отключении окна или внезапной потери интернета информация об онлайне игрока остается не сервере, правда сколько времени игрок должен оставаться онлайн не знаю. По крайней мере у меня так было на всех неофф серверах, на которых играл.
Побеждающий других силен, а побеждающий самого себя могуществен. Лао Цзы ©

Оффлайн 1a0

  • Ветеран
  • *****
  • Сообщений: 3018
  • Karma: 176
  • sic volo, sic jubeo, sit pro ratione voluntas!
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #2 : 01 Октябрь 2013, 10:30:52 »
Согласен, логичность в этом моменте присутствует.
1. Персонаж перестал отвечать на команды - значит появилась патеря пакетов, либо их задержка на линии маршрута.
2. Выход из игры - та же причина что и в первом случае.
3. Снятие задачи через диспетчер закрывает процесс и программу вцелом, но! команды персонажу, а так же последующий выход еще блуждают в просторах интернета пытаясь достучаться до сервера.
4. Повторный логин через пару минут - сервер получает еще предыдущие команды о передвижении и выходе и тут же на него пытаются зайти через другой канал - результат "Аккаунт уже используется"  :pardon:.
К слову, если на один аккаунт поступают команды с двух сторон - акк уходит в автоматический офф, при этом последнее системное сообщение высвечивается тому кто логинится, а тому кто использует акк выдает "Соединение было разорвано" с последующим выходом акка из игры.
ну и повторная попытка залогинится - дает возможность зайти в игру.
ПС: легко это наблюдается, если в два окна попытаться зайти на один и тот же аккаунт.

Оффлайн Dori

  • Постоялец
  • ***
  • Сообщений: 247
  • Karma: 33
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #3 : 01 Октябрь 2013, 11:10:30 »
Спасибо за разьяснения. Просто такое случилось впервые, вот и не знала что гадать.

Оффлайн ABC

  • Старожил
  • ****
  • Сообщений: 469
  • Karma: 3
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #4 : 01 Октябрь 2013, 18:12:13 »
Да, Лао все правильно расписал. Непонятно вот что: какое время перс должен оставаться в игре без поступления команд? На данный момент на автоатаке перс может находиться в игре до 40 минут, просто стоять до 30 минут (возможно и больше, не проверял). И это все при том, что при заходе, если персу не посылать команды, сервер разрывает соединение.
Как мне кажется, сервер должен периодически проверять состояние сессии. Тогда не было бы таких приколов:  на фарме РБ сервер разорвал соединение, дестр остался в пати, исправно бил РБ (конечно без лимитов), принимал бафы и тд. При этом хозяин не смог зайти и отправился спать. РБ зафармили, все улетели, дестр остался. Сколько он там еще стоял не знаю.

Оффлайн 1a0

  • Ветеран
  • *****
  • Сообщений: 3018
  • Karma: 176
  • sic volo, sic jubeo, sit pro ratione voluntas!
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #5 : 01 Октябрь 2013, 20:13:09 »
Да, Лао все правильно расписал. Непонятно вот что: какое время перс должен оставаться в игре без поступления команд? На данный момент на автоатаке перс может находиться в игре до 40 минут, просто стоять до 30 минут (возможно и больше, не проверял). И это все при том, что при заходе, если персу не посылать команды, сервер разрывает соединение.
Как мне кажется, сервер должен периодически проверять состояние сессии. Тогда не было бы таких приколов:  на фарме РБ сервер разорвал соединение, дестр остался в пати, исправно бил РБ (конечно без лимитов), принимал бафы и тд. При этом хозяин не смог зайти и отправился спать. РБ зафармили, все улетели, дестр остался. Сколько он там еще стоял не знаю.
Боюсь, что все команды, которые "дестр" в панике перед выходом отправлял серверу до последнего таки доходили, с некоторым промежутком... Боюсь, что если работать в этом направлении, то начнутся приколы с выбрасыванием игроков при временном пинге больше 300 или однократной потере пакетов более 20%. И тогда все начнут жаловаться, что играть невозможно - все время дисконектит. А в ситуации с "дестром" для меня остается загадкой - почему человек не мог зайти. Во всех подобных случаях первый же логин на этого персонажа (даже более того - на этот аккаунт) выбивает его из игры с пометкой "Аккаунт уже используется", повторный логин позволяет зайти.
К слову, в свое время на ц4 фришках это был один из моментов, когда можно было избежать неминуемого слива прямо посреди пвп, так как персонаж при таком "релогине" моментально вылетал из игры даже в боевом режиме. Насколько я знаю, уже давно такого не происходит, так как после подобного "выбивания" перса он еще несколько секунд остается в игре.

Оффлайн ABC

  • Старожил
  • ****
  • Сообщений: 469
  • Karma: 3
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #6 : 02 Октябрь 2013, 15:54:16 »
40 минут шли... Не много ли?
Ситуация с дестром вполне понятна, например обрыв по физике у абонента или проблемы на оборудовании у провайдера. Непонятно почему дестр остался в игре, если клиент отвалился.
Вернее вполне понятно, если предположить что сервер ждет только команды от клиента. Тогда теоретически перс может остаться в игре до рестарта сервера или до до попытки зайти на аккаунт.
Проверка состояния сессии это немного не то, о чем Вы написали. Это что то вроде пинга до клиента через какие то промежутки времени. Если клиент например не отвечает 5 пингов подряд с промежутком скажем в 2 минуты, то сервер принудительно рвет сессию и перс уходит в оффлайн.
Удивительно другое, при входе и дальнейшем бездействии сервер таки разрывает соединение. Получается что система срабатывает, только не всегда. Что дает основание предположить наличие некоторых проблем в работе сервера.
Релог происходит в течении 2-3 сек. Сравнимо с применением БСоЕ.

Оффлайн 1a0

  • Ветеран
  • *****
  • Сообщений: 3018
  • Karma: 176
  • sic volo, sic jubeo, sit pro ratione voluntas!
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #7 : 02 Октябрь 2013, 16:13:41 »
40 минут шли... Не много ли?
В единичных случаях такую ситуацию представить можно: постоянное обращение к серверу от клиентского компьютера при подобном завершении задачи, или же ежеминутное проскальзывание пакетов в обе стороны с потерей всех остальных, или же банальное зацикливание, которое, впрочем, не исключено, что происходит на сервере.

Меня в этой всей ситуации смущает другое:
При этом хозяин не смог зайти и отправился спать.
Или это была гипотетическая ситуация? К слову, бывает, что люди не знают как отличить закрытое окно от свернутого, если эксплоурер лагнул и на панеле нет активных окон. А после тщетных попыток загрузить еще одно несвернутое окно (40 минут) отправился спать. Думаю, что не зная ни ситуации ни человека, я могу и такое предположить.

Лично же больше 3 минут такого не наблюдал.

Оффлайн 1a0

  • Ветеран
  • *****
  • Сообщений: 3018
  • Karma: 176
  • sic volo, sic jubeo, sit pro ratione voluntas!
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #8 : 02 Октябрь 2013, 16:16:24 »
АВС, хотя все что я описал выше это лишь мое понимание и попытка объяснить ситуацию. Высказать предположения. Ничего общего с наукой сетей не имеет. :-[

Оффлайн Strongman

  • Ветеран
  • *****
  • Сообщений: 607
  • Karma: 42
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #9 : 02 Октябрь 2013, 17:36:34 »
Я периодами пишу свою игруху, архитектурой (не гейплеем) похожую на линейку, поэтому тож поделюсь догадками... Каждый клиент соединяется с сервером отдельным коннектом (socket). Через этот коннект и происходит обмен данными между клиентом и сервером. Сервер и клиент "слушают" и "рассылают" друг другу "сообщения".

Сам механизм работы сокетов предполагает, что при прекращении работы одной из сторон, это сообщается второй стороне. Например, сервер рубанулся с ошибкой - клиенту шлется команда потери коннекта. Игрок закрыл клиент - серверу шлется команда о закрытии коннекта. К сожалению, это слабое место этой системы, и в реальностях, при нагрузке, соединение со стороны клиента может быть потеряно, а сервер команды потери может не получить, продолжая ждать новых асинхронных команд.

Эта ситуация обычно учитывается при разработке клиент-серверных приложений и, для страховки, одна из сторон регулярно пингует вторую. Если на пинг нет ответа некоторое количество попыток и/или секунд, то коннект гасится принудительно.

Предполагаю, что в линейке (конкретно у нас), клиент пингует сервер, а сервер просто отрабатывает асинхронные запросы. Клиент отвалился не послав команду серверу - помните может... в 90% случаев винда сообщает об этом ошибкой при закрытии клиента. Сервер ждет себе спокойно новых запросов по этому коннекту до ситуации, пока ему не понадобиться сообщить клиенту что-то. Например в радиусе нашего игрока пробежал другой игрок - уже отвалившемуся клиенту сервер пытается послать координаты, скорость, внешний вид, ник... перемещающегося игрока - фейл, тогда только он закрывает коннект со своей стороны.

Если значимых событий рядом не было, о которых надо сообщить клиенту по инициативе сервера, то коннект и будет продолжать висеть. А при попытке клиента зайти ещё раз, ему сообщиться, что он уже в игре. )
Pamela - Fortune Seeker 80 / Titan 80 / Adventurer 79 / Sagittarius 78 - гнома-физег
Lopez - Fortune Seeker 76 / Storm Screamer 80 / Eva's Saint 80 / Doomcryer 80 - гнома-мистег
Donna - Fortune Seeker 76 / Titan 77 / Cardinal 79 / Hierophant 79

Оффлайн 1a0

  • Ветеран
  • *****
  • Сообщений: 3018
  • Karma: 176
  • sic volo, sic jubeo, sit pro ratione voluntas!
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #10 : 02 Октябрь 2013, 17:42:06 »
Если значимых событий рядом не было, о которых надо сообщить клиенту по инициативе сервера, то коннект и будет продолжать висеть. А при попытке клиента зайти ещё раз, ему сообщиться, что он уже в игре. )
Как объяснить ситуацию с дестром 40 минут бьющим РБ?

Оффлайн Strongman

  • Ветеран
  • *****
  • Сообщений: 607
  • Karma: 42
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #11 : 02 Октябрь 2013, 17:52:22 »
Если значимых событий рядом не было, о которых надо сообщить клиенту по инициативе сервера, то коннект и будет продолжать висеть. А при попытке клиента зайти ещё раз, ему сообщиться, что он уже в игре. )
Как объяснить ситуацию с дестром 40 минут бьющим РБ?
- сервер ошибочно считал, что значимых событий для этого окна нет, хз почему
 - пакеты идущие в обе стороны кешируются на сервере, потом обрабатываются в порядке очереди... при лагах (тормоза софта/железа,канала) эта очередь может разгребаться очень долго
Pamela - Fortune Seeker 80 / Titan 80 / Adventurer 79 / Sagittarius 78 - гнома-физег
Lopez - Fortune Seeker 76 / Storm Screamer 80 / Eva's Saint 80 / Doomcryer 80 - гнома-мистег
Donna - Fortune Seeker 76 / Titan 77 / Cardinal 79 / Hierophant 79

Оффлайн Dori

  • Постоялец
  • ***
  • Сообщений: 247
  • Karma: 33
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #12 : 02 Октябрь 2013, 22:37:47 »
Тема развилась совсем не в ту сторону.  Отдельный коннект (socket). ???? Понятие о том что это, я имею, в связи с профессиональной деятельностью. (уж более чем 17 лет) Тут имеет место настройка тайминга на серверной стороне. Значимые события ? Я же описала, что второе окно и в пати приглашала, и в торг тоже. Разве это не значимые события для перса (акаунта) ? И только тогда, когда во второй раз логинилась, акаунт раздуплился. Тут имеет место ретрейн акаунта. Но это беда уже не самго сервера, а оборудования на котором он работает или через какое он подключен к сети.

Оффлайн Strongman

  • Ветеран
  • *****
  • Сообщений: 607
  • Karma: 42
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #13 : 02 Октябрь 2013, 23:12:39 »
ну, я всего лишь высказал свое дилетантское мнение
вы тут продолжайте, не отвлекайтесь )
Pamela - Fortune Seeker 80 / Titan 80 / Adventurer 79 / Sagittarius 78 - гнома-физег
Lopez - Fortune Seeker 76 / Storm Screamer 80 / Eva's Saint 80 / Doomcryer 80 - гнома-мистег
Donna - Fortune Seeker 76 / Titan 77 / Cardinal 79 / Hierophant 79

Оффлайн ABC

  • Старожил
  • ****
  • Сообщений: 469
  • Karma: 3
    • Просмотр профиля
После снятия задачи L2.exe перс остался в игре
« Ответ #14 : 03 Октябрь 2013, 09:58:48 »
Короче это догадки. Суть в том, что сервер работает неправильно и так не должно быть. На руоффе по крайней мере так не было. Там если дисконнект, то заходишь на сервер, перса в игре нет.