【问题标题】:Android two player game to be played in internet可在互联网上玩的 Android 两人游戏
【发布时间】:2011-09-09 23:26:02
【问题描述】:

我在安卓中开发了一个简单的二人国际象棋游戏,可以使用蓝牙进行。我想通过使其可以通过互联网播放来扩展它。每当玩家移动时,该移动应通过互联网传送给其他玩家。

如何做到这一点?

我听说过 C2DM 机制。它适合我描述的场景吗?它可靠吗?

谢谢:)

【问题讨论】:

  • 另一种可能性是端口定向短信。不过,我才刚刚开始使用它们,所以我不能真正谈论这些警告。

标签: android android-c2dm


【解决方案1】:

是的,C2DM 非常适合这种类型的游戏。这是我在自己的游戏中使用的 (http://www.chesspresso.net),它是 android 的对应国际象棋客户端。

使用 C2DM 时需要考虑的事项:

  • 您不会将信息发送到设备,而是通知设备已经进行了移动。您不使用 C2DM 传输数据,而是使用它来通知发生了变化。

  • 它适用于 2.2+ Android,这是大多数设备。但是,如果您想支持旧设备,则必须考虑替代方案。我正在对旧设备使用轮询。

  • 您必须请求开发人员访问权限,然后在您的应用准备就绪后,您必须请求生产状态。如果您不这样做,一旦发布,您将很快达到开发者状态配额!他们对生产配额非常慷慨,但您必须说明您的用途,而且可能需要几周时间才能被接受!

  • 您的用户必须拥有经过授权的 Google 帐户,否则 C2DM 将无法工作。大多数用户将拥有与其设备关联的帐户,但有些用户没有,因此这意味着您可能需要验证帐户是否存在以通知用户。

  • 它是可靠的,但有时设备必须等待消息。有时几分钟。通常是瞬间。

希望有帮助!

更新: C2DM 现在已被弃用,取而代之的是 Google 的 GCM

另外,我强烈建议您考虑其他选项,因为将自己绑定到 Google 特定 API 意味着您将无法支持外部市场。对于替代方案,我目前正在评估Amazon SNS,我还将关注Urban Airship。我可能还没有考虑评估其他替代方案。

更新: 非谷歌推送通知的评估更新: Amazon SNS 不是这个任务的项目,而且绝大多数应用程序的 Urban Airship 都太贵了。不幸的是,所有其他替代方案也都非常昂贵,特别是如果您的应用程序(如我的应用程序)严重依赖推送。

【讨论】:

  • “你不使用C2DM传输数据,你用它来通知发生了变化。”,这是什么原因?为什么不使用 C2DM 传输数据?
  • 请阅读“C2DM 不保证消息的传递或顺序。因此,例如,虽然您可能使用此功能告诉即时消息应用程序用户有新消息,但您可能不会用它来传递实际的消息。”,我想这回答了我的问题。
  • 我基本上用它来告诉设备它需要获取什么。你只有 1KB 可以玩。
【解决方案2】:

这样做的一个好方法是在对等点之间使用简单的直接 TCP 连接。

如果您不熟悉 Java 上的套接字编程,请尝试以下操作:

All About Sockets

【讨论】:

  • 如果一台设备位于 NAT 后面? IP地址不会公开可见?如何处理?
  • 在这种情况下,我会建议用户购买互联网访问权限。
  • @vipw:我尝试通过3G连接两个设备,问题是IP地址变化太频繁,无法建立连接。
  • 抱歉回复晚了。在我的回答中,我想到了一个非常本地和点对点的解决方案。做你想做的事的一种简单方法是使用服务器作为设备之间的中间人。然后,您可以使用轮询或一些推送技术(如 C2DM)来检查更新。只是不要忘记 C2DM 需要注册并且仅受 2.2+ 设备支持。
【解决方案3】:

另一种选择是使用某种 IM 作为应用程序的通信媒介。例如。使用Asmack 像 GTalk 一样连接到 XMPP Im。提示用户在那里为您的游戏创建一个帐户。 并使用它通过 IM 发送和接收命令。这样您就无需设置中介服务器。

如果用户知道他在和谁一起玩,这将有效。要收集用户数据并让他们搜索可用的玩家,您仍然需要设置服务器。 IRC 聊天室也可能是避免这种情况的一种选择。

  • GTalk 只是一个例子。您也可以使用任何 IM 或 IRC。

【讨论】:

  • 感谢 Aniket,过去几天我一直在尝试使用 openfire 服务器 smack api。我完成了 openfire 服务器的设置并成功在两个用户之间发送了消息。现在的问题是如何检索列表在 openfire 中注册的用户。我需要此信息来为玩游戏的用户显示它,以便他们可以将它们添加为 frnds。我正在使用 openfire 服务器的嵌入式数据库。你现在如何访问这个数据库并检索 openfire 中的所有用户服务器:)
  • 对不起,不知道 openfire 伙计。 :)
【解决方案4】:

C2DM 并非旨在传输信息,即使它们很小,例如“b4 中的马”或类似的东西。它旨在通知设备某些事情,可能是文档的较新版本或网站上的更多文章.. 像这样的东西.. 它不是为了在设备与设备之间进行通信而设计的。而且对于实时国际象棋游戏来说,它可能不够快。

您应该寻找一种更传统的通过互联网进行交流的方式,或者搜索一些对您有帮助的库(我很确定存在某些东西..)。

【讨论】:

    【解决方案5】:

    恕我直言,C2DM 正是您想要的国际象棋游戏;当 oppo 轮到他时收到通知(可能是几分钟/几小时/几天后?)。我已经与一些 google android 开发人员讨论了我的游戏,他们表示 C2DM 非常适合这个。不过,您需要通过集中式服务器(嗯,不是必需的,但非常可取),因为重新同步游戏状态等可能存在问题。担心“达到极限”?好吧,首先我的 c2dm 帐户被限制为每天“仅”100,000 条消息。我猜你是在买饮料,如果你打到了!!

    【讨论】:

    • 谢谢,C2DM 的可靠性是我关心的问题。你开发了什么样的游戏,是象棋这样的回合制游戏吗?C2DM 的延迟是什么?
    • 这款游戏叫做“条码野兽”。我目前在游戏消息传递中使用了一个糟糕透顶的“通过 google talk 的 http 链接”……在 1.x 和 2.x 设备上工作绝对是一件痛苦的事(不要跟我谈论意图过滤器! !!)但我终于开始了......那一周......谷歌宣布了C2DM。啊啊啊啊啊!!!!!!无论如何..延迟可以在MICROSECONDS中测量..如果c2dm消息在一秒钟内没有到达手机,那就太慢了!我不知道确切的数字,但我猜大约 0.5 - 0.7 秒是平均值。 c2dm 版本正在测试中,很快就会发布 vvv。
    • 哦,可靠性...到目前为止,我从未丢失过正确发送的 c2dm 消息但是对于国际象棋游戏,我会(仅针对皮带和大括号)提供用户提示同步选项 - 我想你无论如何都需要
    • 我的最后一篇文章:如果您想看到 c2dm 的实际效果,请下载我编写的名为“Vera Alert”的应用程序 - market.android.com/details?id=com.fawepark。 veralert - 然后像这样触发一个 http 请求:vera-alert.appspot.com/stat?msg=Hello&recipient=XXXXX 其中 XXXXX 是您启动应用程序时呈现给您的代码。我编写了这个应用程序,因此人们可以将他们的家庭自动化系统与他们的手机连接起来,以便在他们家中发生预先确定的事件时立即发出警报,但如果需要,您可以使用它来查看 c2dm 的运行情况。
    • +1 我同意 C2DM 在这种情况下是正确的选择。如果您想在实施之前测试它的速度,请在您的 Android 设备上试用 Chrome 2 Phone。我在我的应用程序中使用它来发送消息,而且速度非常快。此外,无论如何,连接始终处于活动状态,因此它不会使用任何额外的电池电量来使其处于活动状态。
    【解决方案6】:

    国际象棋通常通过电子邮件进行。你可以这样做。

    当然,任何集中/联合的消息传递系统都可以工作。

    对您的使用更好的方法是将 jabber 客户端添加到应用程序并让程序生成用于自动消息传递的帐户名称。您可以托管 jabber 服务器或在免费提供商上生成帐户。

    【讨论】:

    【解决方案7】:

    Google App Engine 如果你了解 Python 或 Java。

    如今广泛使用的还有两种 Web 应用 API 样式:SOAP XML 和 RESTful Web 服务。

    如果您知道 RoR,我建议您使用 JSON/REST,因为您可以将 Phusion Passenger 与 Apache 一起使用来部署您的应用程序。免费,极其简单,让您的服务器非常可靠。

    你可以,我只提到这一点是因为我的朋友一直这样做,在游戏之间使用 twitter 作为服务器。

    我还发现了一个名为 mages 的库,看起来很有前途。

    祝你好运。

    【讨论】:

      【解决方案8】:

      我这样做是为了我的在线 2D rpg:http://developingthedream.blogspot.com

      基本上,使用中间人服务器来协调所有客户端之间的数据。 您只需打开一个套接字并与中间服务器通信,它负责将信息传递给任何其他连接的客户端。

      由于消息限制以及延迟仍然很大,我不推荐 C2DM。您可以使用自己的服务器对其进行优化,而且您将是唯一使用该服务的人,因此您的数据将被更快地传递。

      【讨论】:

        【解决方案9】:

        我认为 C2DM 不是下棋的正确方式,因为无法保证消息会被传递。您需要更可靠的数据传输方式

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多