代码之家  ›  专栏  ›  技术社区  ›  MahlerFive

在棋盘游戏中使用网络上的观察者模式

  •  2
  • MahlerFive  · 技术社区  · 16 年前

    我正在寻找一个基于C++的风险板联网游戏。我的想法是有一个中央服务器,它承载一个游戏大厅,用户可以在这里连接和制作/加入游戏。在这种情况下,观察者模式似乎很有吸引力,因为我可以在服务器上托管所有游戏模型/逻辑,而客户端只是观察者,并使用视图显示当前游戏状态。

    我的第二个问题:我将如何在网络上实现观察者模式?因为我不能通过网络直接调用方法,所以我需要一些简单的方法来使用数据模拟这种情况。使用“拉”(观察员请求更新游戏数据)或“推”(服务器向所有客户端推出新的更新数据)方法会有更多的优势吗?

    4 回复  |  直到 16 年前
        1
  •  4
  •   agupta666    16 年前

    从您的问题陈述来看,似乎需要实现分布式观察者模式或分布式发布/订阅。PubSub是一种消息传递范例,可以使用MOM(面向消息的中间件)轻松实现(请参阅RabbitMQ、ActiveMQ、OpenMQ),MOM在其中完成繁重的工作。

    XMPP也可以正确地为您服务(参见 XEP-0060 你只需要一个Jabver服务器和一个C++ XMPP库(GOLOX是一个很好的,支持XEP -0600)。

    您可能也对以下内容感兴趣: pubsubhubbub .

        2
  •  3
  •   user208608 user208608    16 年前

    如果您真的想这样做,那么让您的具体观察者也实现代理模式。代理处理发送/接收数据,基本上将本地方法调用转换为远程方法调用。

    因为您处理的是异步数据,所以可能需要查找一个称为“发布/订阅”的观察者变体。其中的观察是由具体的观察者倾听事件,然后在需要交流时提出事件。例如,接收数据可能引发事件。

        3
  •  0
  •   nathan    16 年前

    看起来您使用Observer模式有双重目的。您的游戏客户端将“观察”服务器,但这还不是全部。他们还将把玩家信息传回服务器。所以他们所做的不仅仅是观察。也许只需要使用基本的客户机/服务器模式,而不用担心“设计模式”。或者,如果您想要一种设计模式的方法,可以查看中介模式,其中服务器是中介。就个人而言,我坚持客户机/服务器方法。

    对不起,我知道这并不能回答你的具体问题,但请把它当作思考的食物。

        4
  •  0
  •   Vincent Cantin    16 年前

    对于您的第一个问题:是的,它是每个客户端服务器游戏都使用的模型。

    关于第二个问题:“推送”方法在定时同步和带切换方面更好。使用RPC库(远程过程调用)模拟函数调用。如果你使用C++,我推荐Raknet。如果您使用的是Java,我建议使用Jnag或proto缓冲区。

    推荐文章