Как сделать клиент / серверную игру с помощью Google App Engine
Я пытаюсь сделать свою первую клиент-серверную игру, используя движок Google Apps в качестве моего бэк-энда (требование спецификации.) Я сделал учебники (Java), но все это кажется очень ориентированным на браузер.
В принципе, я хотел бы, чтобы мое (мобильное, не то чтобы это имело значение) приложение:
- разрешить пользователю создать игровой аккаунт (, а не свой аккаунт Google!)
- Войдите в систему с этой учетной записью.
- Нажмите кнопку "MARCO", чтобы отправить запрос, идентифицированный учетной записью, в сервер.
- получите ответ "POLO" от сервера.
- как данные (например, объект JSON, XML-DOM или аналогичный), а не как веб-страница.
Может ли кто-нибудь указать мне хороший учебник/пример проекта/Подробное чтение, чтобы помочь мне достичь этого? Я почти уверен, что, как только я получу эту работу, я смогу сделать все остальное - но у меня есть проблема "застрял на стартовых воротах", не будучи в состоянии работать с основными учетными записями и данными, не относящимися к HTML обмен.
Спасибо!
5 ответов:
К сожалению, все мои знания AppEngine используют их Python SDK, но он "должен" перевести на Java.
Для начала вам нужно построить пользовательскую систему. Я построил несколько как оболочку вокруг системы учетных записей Google, но если вы не хотите, чтобы учетные записи Google, то вы можете построить простую таблицу пользователей и систему сеансов самостоятельно. Концепции довольно просты, но вы можете увидеть, как один построен на вершине AppEngine, взглянув здесь: http://github.com/aht/suas
В этом примере пользовательская система имеет ошибки (файлы cookie), но вам будет все равно, так как вы не будете использовать файлы cookie. На самом деле вам просто нужна возможность хранить учетные записи пользователей, аутентифицироваться по этим учетным записям, запускать сеанс с аутентифицированной учетной записью и передавать ключ сеанса обратно в клиентское приложение. Затем клиентское приложение использует этот ключ сеанса для проверки подлинности в будущем. Детали для выполнения большей части этого можно проиллюстрировать на примере suas, который я привел выше.
Если у вас есть возможность запускать и аутентифицировать сеансы, то на самом деле вам просто нужна возможность делать RPC на сервер из приложения. То, как вы инициируете RPC, зависит от платформы приложения, но при разговоре с AppEngine вам нужно говорить HTTP. В основном клиент будет делать запросы HTTP POST к серверу с телом POST, являющимся объектом JSON / XML, содержащим ключ сеанса, имя функции, которую вы хотите вызвать, и любые аргументы для этой функции. То ответ от сервера будет ответом HTTP с телом ответа, являющимся просто объектом JSON/XML. В Python вы можете использовать SIMPLEJSON API для преобразования Python dicts в JSON легко, и есть XML lib, который работает аналогично. Должен существовать эквивалентный Java API.
Пример выполнения запросов RPC через HTTP к AppEngine (опять же в Python, извините) можно найти здесь: http://code.google.com/appengine/articles/rpc.html
Вы можете пропустить все клиентские материалы, если только вы используете JavaScript (который на самом деле является отличным способом прототипировать тестовый клиент для этого). Часть, которая вас заинтересует, - это то, как сервер вычисляет, какую функцию вызывать и как она отвечает:
self.response.out.write(simplejson.dumps(result))
Надеюсь, что-то из этого поможет вам начать этот проект. Удачи вам!
Вы можете использовать spring-security для управления пользователями и сеансами.
Я использовал в своем проекте несколько библиотек, которые минимизируют ваши усилия по кодированию в GAE.
1) Вы можете использовать objectify для минимизации усилий по кодированию JPA/JDO
2) Используйте JDOM для создания и синтаксического анализа xml
3) Используйте JSON JAVA api JSON google, который они использовали в проекте Google translator wrapper http://code.google.com/p/google-api-translate-java/
Ваше мобильное приложение будет взаимодействовать с вашим приложением GAE через HTTP. Вы должны прочитать о том, как обрабатывать http-запросы (POST / GET) в GAE. Содержание этих запросов будет в JSON или XML или что-то легко понятное с обеих сторон (не html, как вы сами говорите).
Разрешить пользователю создать игровой аккаунт (не свой аккаунт Google!)
Просмотрите параметры базы данных app engine для хранения данных пользователей.
Войдите в систему с этим счет.
Мобильное приложение отправляет запрос POST в GAE, ваш код GAE проверяет имя пользователя / pwdhash.
Нажмите кнопку "MARCO", чтобы отправить на сервер запрос, идентифицирующий учетную запись.
Сессии движка приложений - проверьте их. Клиент получает файл cookie, если авторизация прошла успешно. Файл cookie автоматически отправляется вместе со всеми запросами в GAE. Это автоматически проверяет сеанс клиента.
Получите ответ "POLO" от сервера.
... ответьте сообщением HTTP.
Ответ веб-страницы (html) и ответ JSON отличаются только заголовками (Как данные (например, объект JSON, XML-DOM или аналогичный), а не как веб-страница.
Content-Type
) и полезной нагрузкой (http символьные данные, JSON символьные данные). Оба могут быть отправлены по протоколу http.