Многопользовательский режим через базу данных и панели обновления - как справиться со всем? - PullRequest
0 голосов
/ 07 февраля 2011

Описание того, что я пытаюсь сделать

У меня есть ситуация, когда я создал игру в ASP.NET. Сейчас я работаю над добавлением многопользовательской функциональности, чтобы два (или более) игрока могли сражаться одновременно в «реальном времени».

Короче, у меня есть:

  • Сервер (веб-сайт ASP.NET)
  • Один или несколько посетителей, которые находятся на стороне A
  • Один или несколько посетителей, которые находятся на стороне B

Основная функциональность: один игрок использует атаку против другого игрока, у этой атаки время стрельбы (оба игрока могут видеть время до выстрела), а затем через несколько секунд атака запускается.

Прямо сейчас я справляюсь с этим в каждом игроке. У каждого игрока есть список действий. Деятельность может быть:

  • стрельба в атаку
  • Загрузка атаки равна 0, и атака запускается
  • Некоторые модификаторы характеристик: выпить зелье, получить удар, совершить магию, которая изменяет характеристики

Теперь проблема в том, что я хочу добавить многопользовательскую функциональность и добавить ее через базу данных .

- Пожалуйста, НЕТ кометных предложений -

Моя работа пока ...

У меня есть база данных с несколькими таблицами:

  • Один за каждый начавшийся бой
  • Один с участниками боя
  • Один со всеми добавленными действиями

Каждые 750 мс-1000 мс я запускаю два метода:

  • GetNewActivities (), который считывает все новые действия из базы данных (с отметкой времени)
  • FireCurrentTraces (), который просматривает все текущие трассировки и реагирует на них

Но, конечно, это создает проблемы. Например: Игрок A запускает атаку на игрока B. Пока идет обратный отсчет таймера огня, у обоих людей есть эта «атака» в их списке ожидающих атак. Когда таймер выключен, игрок A или B его запустит, но в этом случае оба будут его запускать.

Это всего лишь одна из МНОГИХ проблем, которые приведут к УЖАСНОМУ дизайну.

Что приводит к моему последнему вопросу ...

Каков был бы выполнимый способ решить эту проблему? Пожалуйста, ни кометы, ни решений. Мне нужно что-то, что имеет отличную поддержку в ASP.NET и должно быть просто работать с .

Полагаю, какой-то глобальный список видов деятельности мог бы творить чудеса, но как в мире это можно было бы сделать? Кроме того, это может дать некоторые условия гонки с несколькими пользователями?

Спасибо! : -)

1 Ответ

3 голосов
/ 07 февраля 2011

Звучит так, как будто вы пытаетесь создать MMO, используя три технологии, которые плохо приспособлены для игр:

  • TCP (а не UDP)
  • Опрос (а не всегда подключенный)
  • База данных, а не в памяти для состояния

Кроме этого, я бы отказался от идеи базы данных для хранения состояния, так как это вызовет так много времени ожидания.MMO-серверы периодически копируют свое состояние на диск, а не все время.

Прежде всего вам понадобится какой-то токен, с которым связаны все игроки, идентификатор игры.Сохраните это в объекте Application в качестве ключа.Затем вы можете сохранить объект состояния в качестве значения, которое содержит все необходимые данные.Это не будет большой объем данных, так как в основном это будут целые числа.

Альтернатива использования таблиц баз данных создает множество проблем с блокировкой строк и выяснением того, что делать в ситуациях взаимоблокировки, как вы упоминали,С опцией «in-memory» вы можете просто использовать выигрыши «первым при выигрыше».

Например,

  1. Я запускаю заклинание
  2. Мой друг снимает свое заклинаниеЧерез 0,5 секунды отправляет команду серверу
  3. Он получает урон от моего заклинания

Попробуйте сделать все это с задержкой сервера базы данных:

  • Открытие нового соединения с сервером базы данных
  • Запрос
  • Возврат к IIS
  • Возвращение к объектам .NET
  • Возврат кклиент.

Вы удаляете первые 4 шага, сохраняя их в памяти.Затем вы можете периодически сериализовать объект игрового состояния в базу данных, если вы беспокоитесь о том, что люди могут отключиться и снова подключиться.Для этой задачи вы можете попробовать базу данных объектов, например, db4o.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...