Ракнет Проб: одностороннее движение - PullRequest
0 голосов
/ 17 июня 2011

В нашей игре есть знаменитая «застрявшая ошибка», которая представляет собой особую ситуацию, когда игроки больше не могут двигаться.Фактически, клиенты больше не будут получать пакеты с сервера, пока сервер все еще отправляет их, а также получает новые пакеты от клиентов.Этой ошибке не менее 1 года, и она до сих пор не решена, поэтому я подумал о том, чтобы спросить.

Некоторые факты:

  • Когда ошибка возникает, она случается со всемиподключенные клиенты одновременно.

  • Новые клиенты могут подключаться и продолжать играть без проблем.

  • Удаление сообщений всегда выполняется сервером -> клиенты, никогда наоборот.

  • Соединения все еще активны и правильно закрываются RakNet, когда клиент нормально отключается (закрывает игру).

  • При возникновении ошибки клиент не получит событие «потерянное соединение» от RakNet.Когда сервер закрывается, он получит его через 10 секунд.Я предполагаю, что он все еще как-то получает внутренние пакеты.

  • Не имеет значения, на какой клиент (ы) сервер отправляет «плохой» пакет / событие, ошибка всегда будет возникать

  • RakNet 3.705, статически связанный.

  • Отправка с RELIABLE_ORDERED на канал 0, в обе стороны.

  • C ++

  • VS2010

Интересно то, что в некоторых случаях мы можем воспроизвести проблему, но случаи кажутся случайными.Похоже, это происходит при отправке события (JSON) с сервера клиентам, которое затем никогда не приходит, а затем оно прерывается.Случайным моментом является то, что я могу немного изменить содержимое строки внутри события, и это заставит проблему появиться или исчезнуть.

Я не могу представить, что это ошибка в RakNet.Может ли это быть какой-то формой повреждения кучи?

Для борьбы с повреждением кучи мы используем:

  • виртуальные GetAs () * функции приведения, которые возвращают this.
  • Диспетчер памяти с отслеживанием памяти, типичными утверждениями и защитниками.
  • Почти всегда используется проверка границ "fxArrays" вместо собственных массивов C.

Я все еще что-то здесь упускаю?

Спасибо за помощь !!

Antoon

...