GWT 使 RPC 阻塞

Posted

技术标签:

【中文标题】GWT 使 RPC 阻塞【英文标题】:GWT make RPC blocking 【发布时间】:2011-01-05 06:58:07 【问题描述】:

是否可以进行 gwt rpc 阻塞?即应用程序阻塞,直到收到来自服务器的响应

【问题讨论】:

您可能需要添加更多信息。在 javascript 应用程序中阻塞调用(这是 GWT 最终归结为的)几乎从来都不是一个好主意。你需要有充分的理由这样做,而且大多数事情都可以使用异步调用来解决(例如,设置一个标志,如果设置了就不要执行某些事情)。 我有一个应用程序,如果从服务器获取用户详细信息,它可以完全加载,所以当应用程序启动时,我创建一个 RPC,然后 rpc 的结果用于输入应用程序,在从 rpc 获取数据之前我无法继续,所以我想让 rpc 阻塞,以便只有当 rpc 完成时,应用程序才能启动 【参考方案1】:

据我所知,没有 gwt rpc 阻塞,因为它与异步回调相反。

但是你可以使用这两种方法

    定时器。计数计时器并检查是否有任何返回对象不为空,然后停止并取消计时器并继续您的工作。如果计时器处于活动状态,请不要做其他工作。这是非常非常低效的方式。 缺乏 OO 设计模式和过多的 if-else-if 语句 调用 Rpc 并在onSuccess() 方法中执行所有操作。它保证您的方法已完成并成功完成,然后继续执行其他方法。

我的建议是第二个(onSuccess)。我想再次提一下,阻塞从来都不是一个好主意

【讨论】:

【参考方案2】:

嗯,同步 rpc 调用被 GWT 设计者称为邪恶。他们确实有非常强烈的论据...但是您可以通过 hacks 成功同步 rpc..这是其中之一, http://code.google.com/p/google-web-toolkit/issues/detail?id=4898

【讨论】:

【参考方案3】:

我想到的最简单的解决方案是从异步调用开始直到填充完成的位置“阻止”您的应用程序,这将在 onSuccess() 方法的末尾。

我所说的阻止是指在页面中间显示一些animated loading gif。

【讨论】:

以上是关于GWT 使 RPC 阻塞的主要内容,如果未能解决你的问题,请参考以下文章

不使用 RPC 的 GWT Ajax 调用

13.RPC的socket实现(阻塞式)与netty实现(非阻塞式)

13.RPC的socket实现(阻塞式)与netty实现(非阻塞式)

耗时的 RPC 会阻塞心跳,从而导致 JGroups 超时吗?

基于Netty构建高性能RPC通信框架

RPC-非阻塞通信下的同步API实现原理,以Dubbo为例