Задать вопрос
@Oxoron
Шарпер

Каких граблей стоит избегать при проектировании пошаговой клиент-серверной компьютерной игры?

Добрый день. Занимаюсь разработкой компьютерной игры вроде шахмат, ради знакомства с wcf, EF и многопоточностью в c#.
Цель: серверная служба, десктопные клиенты. Клиент регается (просто пара логин-пароль, без всяких примочек с безопасностью), получает возможность создавать игры, присоединяться к текущим (как игрок и как зритель), играть с ботами (бот уже есть), получать список игр. В БД хранятся логины пароли, истории игр, рейтинги игроков.

Основной вопрос: стоит ли как-нибудь поддерживать соединение с клиентом во время игры? Понятно, что можно заставить клиента требовать обновления ситуации каждые 5 секунд, но это породит множество бессмысленных запросов-ответов. Куда элегантней кажется решение сохранить данные о клиентском соединении, и отсылать туда инфу при OnGameChange().

Главный вопрос: какие еще тонкие моменты могут вылезти в процессе разработки?
  • Вопрос задан
  • 2804 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@mayorovp
Начну с ответа на ответ выше. Remoting - это не очень-то и красивое решение, его абстракции всюду текут. "Расшаривание" объекта по сети приводит к сложности с определением времени жизни объекта, а простота вызовов методов соблазняет делать кучу мелких запросов вместо одного крупного - что неизбежно приведет к тормозам.

WCF - идеальное решение. Оно куда проще, чем правильная работа с сокетами - и не страдает недостатками Remoting.

Транспорт в этой задаче лучше использовать NetTcp - на нем проще реализуется двусторонняя связь. Соединение с клиентом можно поддерживать средствами ReliableSession - тут только выставьте правильные тайм-ауты, а то результат будет странным. Так, тайм-аут на чтение тут лучше поставить вообще бесконечным, а время жизни сессии, напротив, небольшим.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Neuroware
@Neuroware
Программист в свободное от работы время
При реализации возникнет много заморочек, особенно если писать на низком уровне абстракции. Решение вида OnGameChange красивое, но актуально для realtime игр, вроде экш и т.п. для пошаговой же послать запрос раз в 500мс не критично при правильной реализации, даже если на 1 сервере будет 1000 игр с 10 игроками на каждом, что врятли светит самопальной игре.
По моему опыту подобное легко и красиво реализуется с использованием Remoting.
Весь код клиента и сервера при этом легко уместится в 30 строк в худшем случае. Писал подобный клиент -сервер недавно.
Ответ написан
MilkyCoder
@MilkyCoder
Гений
Ваш сервер должен использовать высоко нагрузочные технологии :). Забудьте про SQL, забудьте про генерацию разметки на строне сервера, забудьте про wcf, xml и прочие чудеса, только binary хардкор, советую делать на web платформе и webSocket'ах. SPA архитектура, HTML5 + JS позволит вам сделать как онлайн игру так и приложение под все мобильные платформы с помощью Apach Cordova.
Ответ написан
Комментировать
belinskiy
@belinskiy
Учусь
дачных
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы