1

我有一个 Flex Web 应用程序,它使用 BlazeDS 与服务器进行单通道端点(非安全)通信。

一切运行良好,我几乎在任何地方都使用 BlazeDS 向服务器和数据库发送和检索数据。现在我正在编写一些新代码来从服务器检索数据,但是服务器必须首先处理这些数据,这需要一些时间(比如 5 到 30 分钟,具体取决于请求)。

到目前为止,我的设计模式一直是向用户显示一个忙碌的光标并禁用主应用程序(Flex 默认情况下会在禁用时模糊应用程序)。这通常在通信完成时持续一两秒。但是,现在通信需要很长时间才能完成,我希望能够让用户继续使用该应用程序,即使来自服务器的进程尚未返回。

所以我想做的不是禁用主应用程序,这样用户就可以在他/她等待数据返回时与之交互。我担心的问题是如果用户在这段时间内使用应用程序向服务器发送另一个进程(例如在第一个进程返回之前)——这会导致问题吗?也就是说,BlazeDS 是否足够聪明,可以知道通道正忙,因此会自动将请求排队?例如,BlazeDS 是否会等到第一个请求返回后再发送第二个或第三个等?

还是我必须以某种方式手动控制此通信以确保它以串行方式发生?如果是这样,是否有任何设计模式来处理这个问题?

或者,BlazeDS 可以在第一个请求返回之前发送并返回第二个请求吗?

非常感谢任何建议。我正在寻找避免用户盯着不可用的应用程序 5 到 30 分钟等待数据返回的方法。繁忙的游标很好,因为它显示数据尚未返回,但特别是禁用的主应用程序(无论它是否模糊)是一个问题。

更新:

这里我说的是同时调用不同的方法,而不是同一个方法。所以如果我有两个方法,我想调用第一个方法,当它等待返回时,调用第二个或第三个方法,在第一个方法返回之前(最终)安全返回。BlazeDS 支持吗?

4

1 回答 1

2

据我所知,blazeDS中没有这样的排队系统。但是您可以配置并发变量:

指示如何处理对同一服务的多个调用的值。默认值为多个。允许使用以下值:

多个- 现有请求不会被取消,开发人员负责通过仔细管理事件流来确保返回数据的一致性。这是默认设置。

single - 该方法一次只允许发出一个请求;在请求未完成时发出的其他请求会立即在客户端出现故障,并且不会发送到服务器。

last - 发出请求会导致客户端忽略任何当前未完成请求的结果或错误。只有最近请求的结果或错误才会在客户端上分派。这可能会简化客户端应用程序中的事件处理,但应注意仅在可以安全忽略请求的结果或错误时才使用此模式。

所以使用“single”可以防止用户多次调用同一个方法

另一种解决方案,如果您想对发送到服务器的消息进行更具体的控制,则使用命令模式。您无需调用许多方法,而是仅调用一种方法并通过网络发送命令对象。您将有更多工作要做,但如果您有一些可以并行完成的操作,而其他操作则不能

于 2012-09-11T06:44:02.310 回答