如果你真的想这样做,那么让你的具体观察者也实现代理模式。代理处理发送/接收数据,基本上将本地方法调用转换为远程方法调用。
由于您正在处理异步数据,因此您可能希望查找名为“publish / subscribe”的观察者变体。这些观察结果是由具体的观察者听取事件,然后在他们需要交流时提出事件。例如,收到数据可能会引发事件。
您还可以查看远程处理,这是您在这里尝试做的事情。虽然对于你想要做的事情来说可能有点过于沉重。
从您的问题陈述中,您似乎需要实现分布式观察者模式或分布式发布/订阅。 PubSub是一种消息传递范例,可以使用MOM(面向消息的中间件)轻松实现 - (请参阅RabbitMQ,ActiveMQ,OpenMQ),其中MOM负担繁重。
XMPP也可以为您的目的服务(见 XEP-0060 )。您只需要一个Jabber服务器和一个C ++ XMPP库(gloox是一个很好的,支持XEP-0600)。
你也可能对此有兴趣 PubSubHubbub通讯 。
您似乎正在使用Observer模式进行双重目的。你是游戏客户端将“观察”服务器,但这不是全部。他们还会将玩家信息传回服务器。所以他们所做的不仅仅是观察。也许只是使用基本的客户端/服务器范例,而不必担心“设计模式”。或者,如果您想要一种设计图案化方法,可以查看服务器作为中介的中介模式。就个人而言,我坚持使用客户端/服务器方法。
对不起,我知道这并没有回答你的具体问题,只是把它作为思考的食物。
对于您的第一个问题:是的,它是每个客户端 - 服务器游戏使用的模型。
对于你的第二个问题:在定时同步和bandwitch方面,“推”方法更好。使用RPC库(远程过程调用)来模拟函数调用。如果您使用的是C ++,我推荐Raknet。如果您使用的是Java,我建议使用Jnag或proto-buffers。