【问题标题】:Sequence diagram for GWT RPC mechanismGWT RPC 机制的时序图
【发布时间】:2014-11-21 18:41:25
【问题描述】:

我不完全了解 GWT RPC 机制,因此我正在寻找序列图。谁有链接?

GWT 主页上的管道图并没有详细描述机制:http://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html#DevGuideRemoteProcedureCalls

【问题讨论】:

    标签: java gwt rpc sequence-diagram


    【解决方案1】:

    据我所知,没有已发布的序列图。但这并没有那么大的帮助,因为它必须同时处理许多层次的抽象:

    • Javascript 端并没有真正“调用”Java 端(它发送请求,这是另一回事)
    • 主要客户端参与者(异步接口的实现)永远不可见,因为它是在项目编译期间生成的。

    要理解的要点是:

    • 服务器端是同步的 - 纯 Servlet API,每个请求都有一个线程处理;
    • Javascript 端是异步的。当你用 Javascript 发送 HTTP 请求时,不能等待响应,只能提供回调。这就是为什么不能在同步接口中包装返回值的 HTTP 调用的原因。
    • 在一个完美的世界中,只有一个接口,桥接客户端和服务器端。服务器会实现接口,客户端会以某种方式获取它的代理并调用它的方法。这就是同步远程处理通常的工作方式。由于上述原因,这是不可能的。
    • 所以我们需要两个不同的接口:一个用于客户端(异步),一个用于服务器(同步)。它们只是按照约定保持在一起,因为Java的类型系统无法表达它们之间的关系(方法名称相同,参数相关,但不相同,返回类型不同)。,
    • 在 GWT 项目的编译过程中,会生成一个实现客户端接口的类。它的实例可以调用服务器(以异步方式)。服务器然后定位同步接口的相关方法的实现并调用它,发送回响应(同步)。响应会触发 javascript 端的回调(异步)。

    所以你有它。整个异步性源于XMLHttpRequest 对象的工作方式。

    请注意,官方 wiki 上的图表具有误导性 - Javascript 调用异步接口,而不是同步接口(如图所示)。

    【讨论】:

    • so -> 在进行 RPC 之前,我们使用 = GWT.create() 实例化 Async 服务代理类 -> 然后使用实例创建 RPC o Async 接口,并使用回调对象作为参数 ( all async) -> 服务器在同步接口上定位此方法的实现(如何?)并调用它。 - 同步接口将调用定向到服务实现 -> 当服务器端代码完成时,它会发回响应(发给哪个类?) -> 响应触发我们使用异步 RPC 和 onfailure 或 onsucces 发送的回调对象方法是否被调用?
    • 非常好的解释。希望你能回答我上面的补充问题
    【解决方案2】:

    【讨论】:

    • 谢谢。他们声明“GWT 不支持与您的客户端应用程序的同步通信。您永远不会使用同步通信”。 ..但序列图上显示的仍然是服务接口,而不是异步接口。它是称为客户端的异步接口。 async -> sync -> serviceImpl 之间的联系在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2012-04-18
    相关资源
    最近更新 更多