gpt4 book ai didi

java - 来自服务实现的 Google Web Toolkit 异步调用

转载 作者:行者123 更新时间:2023-12-02 00:51:15 25 4
gpt4 key购买 nike

我正在编写一个简单的 Google Web Toolkit 服务,它充当代理,它的存在基本上是为了允许客户端向不同的服务器发出 POST。客户端本质上使用此服务来请求 HTTP 调用。该服务只有一个异步方法调用,称为 ajax(),它应该只转发服务器响应。我用于实现调用的代码如下所示:

class ProxyServiceImpl extends RemoteServiceServlet implements ProxyService {
@Override
public Response ajax(String data) {
RequestBuilder rb = /*make a request builder*/
RequestCallback rc = new RequestCallback() {
@Override
public void onResponseReceived(Response response) {
/* Forward this response back to the client as the return value of
the ajax method... somehow... */
}
};
rb.sendRequest(data, requestCallback);
return /* The response above... except I can't */;
}
}

当然,你可以看到我的问题的基本形式。 ajax() 方法是异步使用的,但 GWT 决定变得聪明,向愚蠢的老开发人员隐藏该方法,这样他们就可以编写正常的 Java 代码而无需回调。 GWT 服务基本上只是做魔术而不是接受回调参数。

那么,问题就出现了,因为 GWT 对我隐藏了回调对象。我试图从服务实现中进行自己的异步调用,但我不能,因为 GWT 服务假定您在服务实现中行为同步。我如何解决这个问题并从我的服务方法实现中进行异步调用?

最佳答案

您混淆了客户端和服务器端代码。在 ProxyServiceImpl 中,您不能使用 RequestBuilder。 RequestBuilder 是一个客户端类,仅在浏览器中执行。

服务器到服务器的 http 调用始终是同步的。您应该使用像 HttpClient 这样的库,而不是使用 RequestBuilder ,获取结果然后将其发送回客户端。这将解决您面临的问题。

但我应该补充一点,您不想在应用程序级别构建代理。您也可以使用 http 代理,例如 apache's mod_proxy

关于java - 来自服务实现的 Google Web Toolkit 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com