如何使用Google App Engine制作客户端/服务器游戏

时间:2010-07-27 19:23:27

标签: java google-app-engine client-server

我正在尝试使用Google Apps Engine作为我的后端(规范要求)来完成我的第一个客户端/服务器游戏。我已经完成了教程(Java),但这一切看起来都是以浏览器为中心的。

基本上,我希望我的(移动,而不是重要)应用程序:

  • 允许用户创建游戏帐户(他们的Google帐户!)
  • 使用该帐户登录。
  • 按“MARCO”按钮将帐户标识的请求发送到服务器。
  • 从服务器获取“POLO”响应。
    • 作为数据(如JSON对象,XML-DOM或类似对象),而不是网页。

有人能指点我一个好的教程/样本项目/详细阅读来帮助我实现这一目标吗?我很确定,一旦我完成了这项工作,我就可以完成所有剩下的工作了 - 但是我遇到了“陷入困境”的问题,无法完成基本的帐户登录,并且非HTML数据交换。

谢谢!

5 个答案:

答案 0 :(得分:4)

不幸的是,我的所有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库。必须有一个等效的Java API。

通过HTTP向AppEngine执行RPC请求的示例(再次在Python中,对不起)可以在这里喜欢: http://code.google.com/appengine/articles/rpc.html

除非您使用JavaScript,否则您可以跳过所有客户端内容(这实际上是为此建立测试客户端原型的好方法)。您将感兴趣的部分是服务器如何确定要调用的函数及其响应方式:

self.response.out.write(simplejson.dumps(result))

希望其中一些可以帮助您从这个项目开始。祝你好运!

答案 1 :(得分:1)

您可以使用spring-security进行用户和会话管理。

答案 2 :(得分:0)

我在项目中使用了很少的库,可以最大限度地减少GAE的编码工作量。

1)您可以使用objectify来最小化JPA / JDO编码工作

2)使用JDOM创建和解析xml

3)使用JSON google的json JAVA api他们在谷歌翻译包装器项目中使用过 http://code.google.com/p/google-api-translate-java/

答案 3 :(得分:0)

您的移动应用将通过HTTP与您的GAE应用程序进行通信。您应该了解如何在GAE中处理http请求(POST / GET)。这些请求的内容将采用JSON或XML或双方都很容易理解的内容(不是html,正如您自己所说)。

  

允许用户创建游戏帐户(不是他们的Google帐户!)

查看应用引擎数据库选项以存储用户数据。

  

使用该帐户登录。

移动应用向GAE发送POST请求,您的GAE代码会验证用户名/ pwdhash。

  

按“MARCO”按钮将帐户识别的请求发送到服务器。

App引擎会话 - 检查它们。如果授权成功,客户端将获取cookie。 Cookie会自动发送给GAE的所有请求。这会自动验证客户端会话。

  

从服务器获取“POLO”响应。

...用HTTP消息回复。

  

作为数据(如JSON对象,XML-DOM或类似对象),而不是网页。

网页响应(html)和JSON响应的标题(Content-Type)和有效负载(http字符数据,json字符数据)不同。两者都可以通过http发送。

答案 4 :(得分:-1)

您可以使用其他客户端而不使用您自己的客户端,这将浪费您的时间愚蠢。我已经对整个互联网进行了研究,他们没有给出如何为游戏或任何东西创建客户端/服务器的具体说明。