我正在努力创造一款有趣的2D游戏来学习多人游戏的一些细节。在战略转弯的战斗中,游戏本身将使两名玩家的军队相互对抗。我正在将其开发为独立的桌面客户端(最终可能是手机应用程序)。
我用Java编写游戏,我不信任客户端,因此我考虑了安全性。玩家将拥有一个个人帐户,其中包含军队列表和服务器上的内容。另外,我计划使用mySQL在服务器上存储这种数据。
但是,我不确定如何实现这一点。我是否使用类似网络服务器的东西?这似乎是错误的,但我不知道哪些技术可用于客户端不受信任的Java前端和后端。请注意,我不是在寻找关于最佳方法的辩论,我只需要了解概念,可能是一些示例技术,也许是教程的链接。感谢您的帮助!
答案 0 :(得分:5)
除非您计划将其作为浏览器游戏,否则我认为使用网络服务器不是最佳选择。
套接字可能是您正在寻找的答案,有了它们,您可以创建自己不信任客户端的通信协议。
您的服务器需要使用服务器套接字并接受多个客户端。
您还可以使用Swing作为客户端用户界面。
Here是默认的Java套接字教程。
例如,您的协议可能包含以下命令: (客户端到服务器)移动(UnitGroup,Point) - 告诉服务器要将组移动到某个点,服务器然后执行计算以确定单元到达并开始移动它们所需的时间。 / p>
(服务器到客户端)PositionUpdated(UnitGroup,Point) - 告诉客户端某个组移动到某个地方,可能需要在显示中更新
如果您发布协议,玩家甚至可以让自己的客户按照自己的意愿查看游戏。您的服务器只会通过向客户提供他们应该“看到”的内容来保持公平。
我不知道这会如何影响延迟。
答案 1 :(得分:3)
只是为Psetmaj的有用答案添加一点:
您的游戏客户端和游戏服务器将以非常以Java为中心的方式处理您使用的结构(列表等)。您尚未体验过的部分将是如何打包这些命令和结构以便在TCP或UDP中传输,然后在另一端解压缩它们。这称为“编组”(当您打包有效负载时)和“解组”(当您解压缩它并将其转回Java可以理解的东西时)。事实上,关于它的“硬”部分是它非常乏味,并且需要针对每个不同的消息来回发生。
我的建议是在继续操作辅助函数库时,负责将您使用的结构转换为在通过网络发送和接收它们时所具有的表示形式。该表示可以是基于文本的,如AJAX或基于二进制的,如Java的RMI,无论您决定尝试哪种。