我应该在Java多人游戏中使用RMI吗?

4
我正在用Java构建一个大富翁游戏,并希望它能够支持网络游戏(这样我和我的美国朋友就可以一起玩了)。
网络编程是我尚未涉足的整个编程领域,所以我一直在努力决定如何实现它。总的来说,我认为正确的方式是有一个服务器应用程序,其中包含所有的大富翁游戏代码,然后有一个仅具有GUI和远程方法调用的应用程序客户端。
对于这个项目来说,RMI是否过于复杂或者是最好的方法?你有什么建议或技巧可以给我吗?
更新:这个游戏将完全使用Java开发,因此不必担心客户端需要安装Java。另外,获取一些关于使用RMI的技巧也会很棒。
2个回答

15

RMI并不是很复杂,恰恰相反。

它使您能够开发游戏协议,而无需担心在服务器和客户端之间传递Message对象,并进行长时间的if链检查,以确定消息类型并执行所需操作。

使用RMI实际上可以拥有一个集中的对象(在服务器上),您可以直接从客户端调用其中的方法,例如 iWantToMoveThere(position)iWantToBuyLand(where) 等等。这简化了协议,同时会增加一些开销,但这种开销在任何情况下都会存在,因为我不建议您实现二进制协议。XML或序列化的Java协议将是一个好的折衷方案,因为对于这样的游戏,您并不需要实时性。

RMI的另一个优点是,您将轻松管理一个主服务器,许多游戏服务器可以连接到该服务器,给玩家提供在其中玩游戏的机会,还有许多其他小细节,例如管理单独的大厅等。

只举一个实际经验:我使用RMI来管理一个服务器,允许开发人员发布自己的游戏插件,使玩家可以自动连接到服务器并下载内容以便游戏。除了我需要一个反向TCP连接来处理异步事件之外,所有内容都由RMI处理。整个源代码只有7-8个类的一小段约1k行。


这是我的印象。不过在这里发问之前,我不想直接跳进去。谢谢 :) - seadowg
你能否给我提供一个简单的RMI应用程序的示例源代码,如果不麻烦的话?看起来你真的很擅长它。 - seadowg

0

听起来你要使用厚客户端。为什么呢?你可以使用一个100%的Java服务器,拥有所有的业务逻辑,并通过浏览器使用jQuery/Ajax访问它并渲染HTML5。

回答你的问题,我会说对于你所做的事情来说,RMI可能太复杂了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接