GWT RPC 机制的时序图
Posted
技术标签:
【中文标题】GWT RPC 机制的时序图【英文标题】:Sequence diagram for GWT RPC mechanism 【发布时间】:2014-11-21 18:41:25 【问题描述】:我不完全了解 GWT RPC 机制,因此我正在寻找序列图。谁有链接?
GWT 主页上的管道图并没有详细描述机制:http://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html#DevGuideRemoteProcedureCalls
【问题讨论】:
【参考方案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】:序列图可以在这里找到
https://code.google.com/p/welikegwt-presentation/wiki/GwtRpc
【讨论】:
谢谢。他们声明“GWT 不支持与您的客户端应用程序的同步通信。您永远不会使用同步通信”。 ..但序列图上显示的仍然是服务接口,而不是异步接口。它是称为客户端的异步接口。 async -> sync -> serviceImpl 之间的联系在哪里?以上是关于GWT RPC 机制的时序图的主要内容,如果未能解决你的问题,请参考以下文章