通过应用范围到多个客户端的事件?

时间:2011-02-15 14:26:03

标签: c# asp.net client-server observer-pattern application-state

首先,我正在使用标准的ASP.NET网站创建类似客户端/服务器解决方案的东西 - 我知道这种方法并不值得推荐,大多数人都喜欢尖叫“COMET!”或“HTML5套接字!” - 但请不要;-)!

我在做什么......

我正在网站上创建一个MMORPG。

我有几个客户需要同时联系。这是由应用程序范围中的全局对象完成的。

我的问题

我需要向几个客户调用一个事件。例如,当执行攻击时,我需要更新一些图形。攻击逻辑在全局对象中得到解决,但每个客户端都必须对此做出响应。

现在我执行以下操作:

   fightTrace.Reciever.InvokeMoveEnded(this);
   fightTrace.FiredBy.InvokeMoveEnded(this);

(这是一种观察者模式)

现在发生的事情是竞争条件。加载page_load事件的人将获得这两个事件,而未运行这些事件的人将不会在UI中遇到任何更改。

那我真正想要的是什么?

我真正需要的是通过应用程序状态创建观察者模式的一些真实而好的方法。我需要向每个“监听器”发送一个事件,在这种情况下是一个客户端,然后进行一些更新。

这样做的一种方法是使用true / false进行会话,但我真的想要更好的方法!

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的上下文,那么无论何时更改应用程序状态对象的状态,您都希望同步应用程序的所有客户端。你在这里忘记的是HTTP协议的无状态行为。一旦发送响应,连接就会丢失,您需要再次发送HTTP请求才能再次提供服务。但是,您可以使用状态管理和基于Ajax的简短及时更新来模拟某些事情来模拟连接的环境。但是我要说出你不想听的话。不建议。

相反,您可以做的是保存应用程序对象的状态,并且每当请求根据对象的更新状态提供响应时。客户端如何发起请求。