Особенности дизайна для многопользовательской карточной игры - PullRequest
0 голосов
/ 12 ноября 2010

Я работаю над движком карточных игр в C # .NET уже некоторое время. На данный момент он близок к завершению, но интерфейс до сих пор был простым консольным с ReadLine и WriteLine.

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

Я хочу развернуть это в полномасштабное онлайн-приложение. Я много читал о WCF и его поддержке обратного вызова в веб-сервисах, и это кажется мне достойным вариантом. Тем не менее, я открыт для других идей, если они хорошо подходят.

Единственная проблема, которую я ожидаю, - это ночной кошмар, когда я пытаюсь это сделать. У меня есть подход, о котором я думаю, что он может максимально уменьшить проблемы с потоками:

1) Служба WCF должна только когда-либо запрашивать данные у пользователя (например, запрашивать какое-либо действие) через интерфейс обратного вызова И предоставлять несколько односторонних обратных вызовов, чтобы уведомлять клиента об обновлениях состояния игры. Акцент: клиенты не могут «запрашивать» состояние игры. Единственный способ отправить данные на сервер, если сервер запрашивает их через обратный вызов.

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

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

1 Ответ

1 голос
/ 12 ноября 2010

Если вы хотите, чтобы это было веб-приложение (html), то я бы сказал, что лучше всего было бы использовать веб-сокеты (изначально поддерживаются в chrome, flash-плагин для других браузеров) и интегрировать сервер веб-сокетов, такой как самородок в ваш код.Это обеспечивает реальную передачу данных от сервера к клиентам.

Если вы создаете интерфейс Silverlight, у вас есть много вариантов, но из того, что я понял, единственно реальный вариант, если вы хотите масштабировать последние 500 онлайн-клиентов одновременно, этоиспользовать собственный сервер, поскольку IIS не может одновременно обрабатывать очень много клиентов.Я поболтал с парнем, который делал версию Silverlight Agricola , и он использовал собственный сервер, который прекрасно интегрировался с iis под названием websync , который довольно дорог для любителя, но выглядит потрясающе.*

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

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