【问题标题】:Java Multiplayer Game Networking ConceptJava 多人游戏网络概念
【发布时间】:2012-12-24 08:07:20
【问题描述】:

我正在用 Java(客户端和服务器)开发一个多人回合制策略游戏。我在网络游戏方面没有太多经验,但我做过一些小事情,比如多客户端聊天和带套接字的 2 玩家井字游戏。我不是在找人为我编写代码,只是给我一些指导。

游戏经历了多个阶段:首先,用户连接并登录。在他获得主持/加入游戏的选项之后。在他加入游戏或有人加入他的游戏后,客户进入游戏阶段。游戏是 1v1,只需要每 5 秒来回发送一次数据(如果这很重要?)。我只需要一些关于如何设计客户端/服务器以通过这些“阶段”的指导。

这就是我目前正在考虑的实现方式:

  1. 当建立连接时,连接将有一个相应的变量来描述服务器上的状态。例如:0 是登录前,1 是登录后,2 是托管,等等......

  2. 每当客户端向服务器发送数据时,它都会检查状态并进行相应的处理。就像在登录之前发送数据一样,服务器将假定它是登录详细信息,如果它们有效,它将变量更改为 1 并告诉客户端前进。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java client-server multiplayer game-development


    【解决方案1】:

    您可以使用 Mina 或 Netty 作为 Nio 套接字框架。在服务器和客户端中都使用 Java 可以更容易地设计消息协议。当一个客户端移动时,您向服务器发送一条移动消息,然后服务器将一条消息推送回两个客户端。两个客户端在收到消息时一起移动。因此,如果避免网络延迟,两个客户端会同步移动。 大家可以看看java写的开源游戏框架。

    java game server engine

    【讨论】:

      【解决方案2】:

      基本上你如何描述它就是它通常是如何完成的。只需让服务器侦听客户端连接,然后在客户端连接出现时在其自己的线程中处理它们。然后来回发送消息以确认状态(登录与退出、加入游戏等)以及在游戏中为玩家移动的消息。 TCP 或 UDP 套接字在短期内都可以工作,但最终您可能会切换到主要基于 UDP 的系统,因为服务器和客户端之间发送的消息将相当小,并且延迟可能是关键,具体取决于游戏类型。

      考虑通过 JSON 发送/接收消息(我上次检查时,http://wiki.fasterxml.com/JacksonHome 是一个相当流行的 Java 解析器)。

      此外,您需要在服务器端使用多个数据结构来有效地管理客户端及其状态。例如,您可以为每个客户端设置一个整数 id,并使用一个 Map<Integer, Client> 来存储所有当前连接的登录用户,其中 Client 是一些存储该用户当前状态的对象。

      希望这能给你一些关于从哪里开始的想法。

      【讨论】:

      • 嗨,Alex,可以使用 TCP 连接来连接移动设备以进行象棋之类的游戏吗?考虑到 IP 有可能被 ISP 更改。
      【解决方案3】:

      既然是完整的 Java + 客户端-服务器 + 游戏:

      我建议你忘记使用直插口。

      在我看来Java RMI 是你最好的选择。

      为什么?:

      • 一旦你学会了它,它比套接字更容易。

      • 您可以直接从您的 java 客户端/服务器调用远程方法。

      • 您可以使用回调。 (即服务器测试客户端仍然连接)

      可能还有更多的原因......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多