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