Java 基于回合的多人游戏架构问题

Java 基于回合的多人游戏架构问题,java,mysql,webserver,multiplayer,Java,Mysql,Webserver,Multiplayer,我正在创建一个2D游戏,以获得乐趣,学习多人游戏的一些细节。游戏本身将让两名玩家的军队在一场基于回合的战略战役中相互对抗。我把它开发成一个独立的桌面客户端(最终可能是一个手机应用程序) 我用Java编写游戏,我不信任客户机,所以我考虑了安全性。玩家将有一个个人帐户,上面有他们的军队名单以及服务器上的物品。此外,我计划使用mySQL在服务器上存储此类数据 然而,我并不确定如何实现这一点。我是否使用类似Web服务器的东西?这似乎是错误的,但我不知道在客户端不受信任的情况下,Java前端和后端应该使用

我正在创建一个2D游戏,以获得乐趣,学习多人游戏的一些细节。游戏本身将让两名玩家的军队在一场基于回合的战略战役中相互对抗。我把它开发成一个独立的桌面客户端(最终可能是一个手机应用程序)

我用Java编写游戏,我不信任客户机,所以我考虑了安全性。玩家将有一个个人帐户,上面有他们的军队名单以及服务器上的物品。此外,我计划使用mySQL在服务器上存储此类数据

然而,我并不确定如何实现这一点。我是否使用类似Web服务器的东西?这似乎是错误的,但我不知道在客户端不受信任的情况下,Java前端和后端应该使用什么技术。请注意,我不是在寻找一个关于最好的方法的辩论,我只需要知道概念,也许是一些示例技术,也许还有一个到教程的链接


谢谢你的帮助

除非你打算把它变成一款浏览器游戏,否则我不认为使用Web服务器是最好的主意

套接字可能是您正在寻找的答案,使用它们,您可以创建自己的不信任客户端的通信协议

您的服务器将需要使用服务器套接字并接受多个客户端

您还可以将其用于客户端UI

是默认的java套接字教程

例如,您的协议可能包括以下命令: (客户端到服务器)移动(单元组,点)-告诉服务器您要将一个组移动到一个点,然后服务器执行计算以确定单元到达并开始移动到该点所需的时间

(服务器到客户端)位置已更新(UnitGroup,Point)-告诉客户端某个组已移动到某个位置,可能需要在显示中更新

如果你发布你的协议,玩家甚至可以让他们自己的客户端按照他们的意愿观看游戏。您的服务器将通过只给客户端他们应该“看到”的东西来保持公平


不过,我不知道这会如何影响延迟。

只是想补充一下Psetmaj的有用答案:

您的游戏客户端和游戏服务器将以非常以Java为中心的方式处理您使用的结构(列表等)。您尚未体验到的部分将是了解如何将这些命令和结构打包为TCP或UDP传输,然后在另一端解包。这称为“编组”(打包有效负载时)和“解编组”(解包并将其转换回Java可以理解的内容时)。事实上,它的“困难”部分是,它非常乏味,需要针对每一个来回传递的不同消息进行处理


我的建议是,在您继续的过程中,开发一个助手函数库,该库负责将您使用的结构转换为当您通过网络发送和接收它们时它们将具有的表示形式。该表示可以是基于文本的,如AJAX或基于二进制的,如Java的RMI,无论您决定尝试哪一种。

错误点击了,谢谢。为什么要使用SQL?一个简单的服务器可以处理聊天的TCP连接和玩家操作的UDP连接,这正是你所需要的。我要告诉你,libgdx对我的android开发有着不可估量的帮助。您可以同时无缝地为桌面和设备进行开发。他们有一个很好的社区,可以为安全提供一些指导。我自己在我的任何应用程序中都没有达到这一点,但这是一个非常强大的框架,他们几乎积极地考虑了这一点。如果您在开发过程中进展顺利,这可能没有什么帮助,但如果您刚刚开始,我强烈建议您检查一下并运行一些示例。你会惊讶于你能用它发展的如此之快。数据库将保存关于玩家帐户的数据。他们将能够建立不同的军队名单,它将存储他们的基本帐户信息。很多都是为了学习@开清我实际上在使用libgdx。我想我只是不知道如何使用TCP/UDP的东西。嘿,那好酷。发布你学到的东西,因为我最终会想知道同样的事情。太棒了,我想这就是我要找的。Java序列化为你做了所有这些。从Java序列化开始,然后在出现问题时改变方法(可能的原因:性能、跨语言兼容性、带宽)。我是否可以使用一些库来抽象这一点,而不是编写自己的帮助函数?(我不喜欢重新发明轮子)。有,而且通过搜索也不难找到。但是如果你真的想自己了解多人游戏的细节,我的答案很有用。另一方面,如果你想研究其他人的实现,它是开源的,有很多特性。谢谢你的输入。我将进一步调查此事。