Игровой сервер для пошаговой настольной игры на андроид / iOS

9

В настоящее время я программирую игру для iPhone и хочу создать многопользовательский режим онлайн. В будущем это приложение будет портировать на устройства Android, поэтому мне было интересно, как создать игровой сервер?

Во-первых, какой язык мне выбрать? Как сделать так, чтобы сервер мог общаться как с программами, написанными на Objective-C, так и с Java?

Тогда как эффективно это сделать? Это хорошо, если я открою сокет клиентом (будет 2)? Какую информацию я должен отправить на сервер? клиентам?

Сирил
источник

Ответы:

7

Я не хочу начинать священную войну здесь, но большинство интернет-сервисов (flickr, twitter, facebook и т. Д.) Отказались от SOAP в пользу веб-сервисов RESTful и JSON в качестве сериализованного формата. Хотя сервисы REST по сути одинаковы, для определения того, что следует сделать, используются методы url и http, например

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - описанный в json.org - также проще, чем XML, и, хотя, возможно, не имеет значения, сэкономит вам несколько байтов на запрос. Следуя предыдущему примеру, вот как статья будет описана в нотации JSON:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

Для IOS есть хорошая статья http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/, в которой упоминается http://code.google.com/p/json-framework / для разбора и генерации данных.

Будучи пошаговыми, вы можете полагаться на http-сессии на сервере для поддержания состояния, поэтому нет необходимости поддерживать постоянное сокетное соединение с сервером. Любой серверный язык поддерживает это (php, python, java и т. Д.).

Эта архитектура позволяет масштабировать горизонтально (добавляя больше серверов) прозрачным способом.

guigouz
источник
4

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

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

Что касается данных, которые вы должны отправить обратно, всегда относитесь к клиенту как к враждебному. Клиент должен отправить то, что его «состояние поворота», сервер проверяет его, а затем, если все проверяется, он отправляет новое «состояние игры» обратно всем подключенным клиентам.

-

Веб-сервисы SOAP, вероятно, являются лучшим местом для начала ( ссылка ), их легко начать, и большинство веб-фреймворков предоставляют метод для их демонстрации. Возможно, вы также захотите изучить службы RESTful, но они обычно оставляют потребителю чуть больше процесса сериализации.

Что касается использования SOAP веб-сервисов на Android, я бы посмотрел здесь .

Nate
источник
Привет и спасибо за ваш ответ. Но я пока не понимаю, как отправить данные на мой веб-сервис? как сериализовать пользовательский ввод (здесь движение на моей доске 8 * 8, например: игрок 1 с [0,0] до [1,1]), а затем как сериализовать состояние игры?
Кирилл
Проверьте две ссылки, которые я добавил. Они должны помочь вам начать работу с веб-сервисами SOAP, что, вероятно, является самым простым способом начать работу.
Ноябрь
Для Android и iOS вам не нужно использовать длинные опросы. Push-уведомления Apple или Google Cloud Messaging позволят вам передавать данные с сервера на ваши устройства.
Мэтт
2

Я думаю, что использование SOAP или даже HTTP излишне. Просто определите свой собственный протокол поверх ванильных TCP-соединений. Например, интерпретируйте каждую строку текста, отправляемую как команду. Определите, какие команды / ответы клиенту и серверу разрешено отправлять.

FICS работает таким образом и уже много лет обслуживает тысячи шахматистов. IRC работает так же (см. RFC 1459).

MDM
источник
HTTP предлагает несколько преимуществ, хотя: он может использовать прокси, он почти никогда не защищен брандмауэром, он предлагает почти прозрачное шифрование с использованием HTTPS, имеет несколько методов аутентификации ...
Сэм Хоцевар,