如何在RMI多用户应用程序中实现MVC模式?

时间:2010-09-10 13:00:00

标签: java model-view-controller design-patterns distributed

我正在尝试创建用于创建小型多用户游戏的框架/库/ API,其目标是实现服务器,客户端和业务逻辑之间的“解耦”。

在我的情况下,服务器是一种注册客户端并发送它  列表到业务逻辑,客户端正在注册服务器,  并且业务逻辑执行游戏逻辑并通过从服务器获取客户端列表来更新客户端。

但是目前, 我只有一个类,所以它很简单,但这可能包含几个游戏对象  (以及类序列化/远程类的作用是什么 像游戏引擎,玩家,得分,移动,董事会)。 我决定使用RMI,这肯定会使用回调 有人告诉我机制。

我怎样才能实现这个包含服务器更新客户端(回调)的所有要求。

PS:我目前正在进行设计,它有一个用于处理gamelogic的远程/序列化对象,但我想  为了制作多用户游戏库而使用我提到的其他类,并在其中显示重要类的使用作为示例。

非常感谢

jibby

1 个答案:

答案 0 :(得分:2)

如果你打算让这个框架适用于实时游戏,那么我建议不要使用RMI - 它并不是真的设计用于那种事情。还要注意,不同子网上的计算机之间的双向RMI很难实现。

似乎您需要在事件发生时通过服务器通知客户端。当您的客户端连接时,它可以从服务器的RMI注册表中查找远程对象,并在其上调用一个方法,将其创建的(在客户端上托管的)远程对象传递给服务器。服务器必须维护这些客户端对象的集合并迭代它们以发送事件。这是一个棘手的架构,如果网络出现故障或客户端脱机,您将不得不处理各种令人讨厌的错误处理和冻结。我建议你保持大部分通信方向 - 从客户端到服务器。同时保持它尽可能简单 - 只需服务器上的远程对象,使用各种方法将Serializables作为参数并返回Serializables。

这是否是MVC取决于您的解释。您可以将客户端视为服务器上的模型和控制器的视图,在这种情况下,它是MVC,事件机制是观察者模式的远程实现。

任务最棘手的部分肯定是获取服务器上的代码,通知客户端正确,因为它需要多线程并优雅地处理错误 - 祝你好运!