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