我有一个Flex web应用程序,它使用BlazeDS与服务器进行单通道端点(非安全)通信。
一切都运行得很好,我几乎在任何地方都使用BlazeDS向服务器和数据库发送和检索数据。现在,我正在编写一些新代码来从服务器检索数据,但是服务器必须首先处理这些数据,这需要一些时间(根据请求的不同,可能需要5到30分钟)。
到目前为止,我的设计模式一直是向用户显示忙碌的光标并禁用主应用程序(默认情况下,Flex在禁用应用程序时会模糊该应用程序)。当通信完成时,这通常持续一到两秒。但是,现在通信需要很长时间才能完成,我希望即使来自服务器的进程尚未返回,用户也能够继续使用应用程序。
因此,我想要做的不是禁用主应用程序,以便用户可以在等待数据返回时与其交互。我担心的问题是,如果用户在这段时间(例如,在第一个进程返回之前)使用应用程序向服务器发送另一个进程--这会导致问题吗?也就是说,BlazeDS是否足够智能,能够知道通道繁忙,从而自动对请求进行排队?例如,BlazeDS是否会等到第一个请求返回后再发送第二个或第三个请求,等等?
或者我必须以某种方式手动控制这种通信,以确保它以串行方式发生?如果是这样,有没有什么设计模式来处理这个问题呢?
或者,BlazeDS可以在第一个请求返回之前发送和返回第二个请求吗?
任何建议都非常感谢。我正在寻找避免让用户盯着一个无法使用的应用程序5到30分钟等待数据返回的方法。一个繁忙的游标很好,因为它表明数据还没有返回,但是一个被禁用的主应用程序(无论它是否模糊)是一个问题。
更新:
这里我讨论的是对不同方法的同时调用,而不是对同一个方法的同时调用。因此,如果我有两个方法,我想调用第一个方法,当它等待返回时,调用第二个或第三个方法,它们在第一个方法返回之前(最终)安全返回。BlazeDS是否支持这一点?
发布于 2012-09-11 14:44:02
据我所知,blazeDS没有这样的排队系统。但是您可以配置并发变量:
指示如何处理对同一服务的多个调用的
值。默认值为multiple。允许使用以下值:
多个- Existing请求不会被取消,开发者有责任通过仔细管理事件流来确保返回数据的一致性。这是默认设置。
single -在该方法上一次只允许发出一个请求;在请求未完成时发出的其他请求会立即在客户端出错,并且不会发送到服务器。
last -发出请求会导致客户端忽略任何当前未完成请求的结果或错误。只有最新请求的结果或错误才会被分派到客户端。这可能会简化客户端应用程序中的事件处理,但应注意仅在可以安全地忽略请求的结果或错误时才使用此模式。
因此,使用"single“可以防止用户多次调用同一方法
如果您想对发送到服务器的消息进行更具体的控制,另一种解决方案是使用command pattern。不需要调用很多方法,而是只调用一个方法,通过网络发送一个命令对象。你会有更多的工作要做,但如果你有一些操作可以在parallele中完成,而其他操作不能完成,这是一个很好的解决方案
https://stackoverflow.com/questions/12361696
复制相似问题