gpt4 book ai didi

java - 安卓多人网络游戏

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:33 24 4
gpt4 key购买 nike

我正在编写一个 Android 多人游戏,它基本上由客户端连接和交换消息的服务器组成。当玩家连接到服务器时,玩家列表会返回给他/她。然后玩家可以选择一个用户来挑战——当然他必须从玩家列表中选择一个玩家,该列表只包含连接的用户。

当玩家 1 挑战玩家 2 时,需要从玩家 1 向服务器发送一条消息,服务器又必须向玩家 2 发送消息,通知他挑战。然后玩家 2 可以接受/拒绝挑战。

我可以使用以下技术来实现这一点:

  • 将自定义服务器/客户端与 Java 套接字编程结合使用。服务器基本上接受来自客户端的连接,为每个连接的客户端生成一个新线程。这样做的问题是:
  • 需要从客户端到服务器打开一个持久连接,这会浪费 Android 手机的电池生命周期。这并不是很大的限制,因为电池没有消耗那么多。
  • 当我想开发另一个游戏时,我必须从头开始重写客户端/服务器代码——还要选择另一个端口来监听传入的连接——整个概念变得相当难以维护。
  • 我也担心这是不是这样做的方式。如果数千个客户端同时连接,则为每个客户端生成另一个线程听起来相当多。但我猜PC游戏就是这样做的。不确定安卓。
  • 使用 Java REST jersey 在 HTTP 之上构建客户端-服务器。如果服务器可以轻松地向客户端发送通知,这将是一个完美的解决方案。这里实际上有多个设计决策:
  • 客户端每隔几秒就为任何新数据/通知拉取服务器 - 这真的很糟糕,因为我们陷入了无响应、延迟等问题。
  • 客户端可以向服务器发送等待请求,因此客户端只有在一些数据可用后才会收到响应。这更好,但是当需要一个接一个地向用户发送两个通知时,仍然会产生延迟。第一个通知会立即发送,因为客户端已经打开了连接,等待接收数据。但是我们必须等待客户端发起另一个长 http 请求才能接收第二个通知。由于需要连续向特定客户端发送多个通知,因此问题变得更大。
  • 客户端可以启动 http 流,在处理请求时通信保持打开状态,因此服务器也可以随时向客户端发送多条消息。这里的问题是我不知道这在 Android 上的效果如何。我看过几个实现:
  • Java jersey + 氛围:没有真正让它发挥作用。这似乎是最有希望的,但我不想在它上面花太多时间,因为我什至不确定它是否符合我的要求。
  • Deacon:看起来很整洁,但是在他们官方网页上看到视频教程后,我不确定它是否可以满足我的需求。当玩家 1 挑战玩家 2 时,它是否可以向玩家 2 发送通知,让它知道比赛请求?
  • 如果两个玩家通过网络玩游戏,我很高兴知道其他多人游戏如何处理网络通信。
  • 我也对如何实现我想要的全新建议持开放态度。我几乎可以编写任何代码,所以不要犹豫,让我知道一些更困难的实现网络通信的方法。

  • 我还要提一下,我很乐意在我的情况下实现一种完全特定的方法,所以它可以是任何可以完成工作的东西,但我也在寻找更通用的客户端和服务器之间的通信方式.这样我就可以对界面/任何东西进行编程,并在其他 android 游戏、android 应用程序中重用代码。

    我希望我能很好地提出问题,并且我会收到一些有值(value)的答案。

    谢谢

    最佳答案

    你应该看看XMPP。它是一种协议(protocol)(最初为聊天程序创建),允许在用户之间发送 xml 数据。
    它具有独立的客户端-服务器关系,因此您可以专注于开发适合手机的客户端应用程序,并根据您的需要开发不同的服务器。

    有大量关于该协议(protocol)的信息(我应该知道,我写了一篇关于在游戏应用程序中使用该协议(protocol)的论文),但您可以从 looking it up on wikipedia 开始。看看它是否是你想要的。

    aSmack是一个用于创建 android xmpp-clients 的库。设置它并让一切正常工作需要一些调整,但是一旦你这样做了,它就很整洁。

    编辑:与建议使用 C2DM 的答案有关:
    来自 c2dm docs "Sending large numbers of C2DM messages" :

    Are you sending C2DM messages too frequently? If you need to communicate with your application frequently over a short period of time, C2DM is probably not the best solution. Instead, consider implemeting XMPP or your own protocol to exchange messages, and use C2DM only to send the initial notification.

    关于java - 安卓多人网络游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490574/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com