取消gwt rpc调用

取消gwt rpc调用,gwt,gwt-rpc,Gwt,Gwt Rpc,在这个例子中,有一个关于如何使用定时器#时间表创建超时逻辑的详细描述。但这里有一个陷阱。我们有两个rpc请求:第一个在服务器上进行大量计算(或者可能从数据库中检索大量数据),第二个是立即返回结果的微小请求。如果我们发出第一个请求,我们将不会立即收到结果,相反,我们将有一个超时,超时后我们发出第二个微小请求,然后示例中的abortFlag将为true,因此我们可以检索第二个请求的结果,但也可以检索之前超时的第一个请求的结果(因为第一次调用的AsyncCallback对象未被销毁) 因此,我们需要在

在这个例子中,有一个关于如何使用
定时器#时间表
创建超时逻辑的详细描述。但这里有一个陷阱。我们有两个rpc请求:第一个在服务器上进行大量计算(或者可能从数据库中检索大量数据),第二个是立即返回结果的微小请求。如果我们发出第一个请求,我们将不会立即收到结果,相反,我们将有一个超时,超时后我们发出第二个微小请求,然后示例中的
abortFlag
将为true,因此我们可以检索第二个请求的结果,但也可以检索之前超时的第一个请求的结果(因为第一次调用的
AsyncCallback
对象未被销毁)


因此,我们需要在超时发生后取消第一个rpc调用。我如何才能做到这一点?

让我给你一个类比

你,老板,打电话给一个供应商,想得到一些产品信息。供应商说他们需要给你回电话,因为收集信息需要一些时间。所以,你给了他们你的工头的联系方式

你的工头等待电话。然后你告诉工头,如果需要超过30分钟,就取消信息请求

你的工头认为你疯了,因为他不能取消请求,因为他没有一个帐户,使他有权访问供应商的订购系统

因此,你的工头在30分钟后根本不理会供应商的任何回应。你聪明的工头在手机中设置了计时器,30分钟后不理会供应商的电话。即使你杀死了工头,切断了所有通信链接,供应商仍将忙着为你的请求提供服务

GWT客户端上没有什么可以取消的。回调只是一个等待调用的javascript对象

要取消调用,您需要告诉服务器端停止浪费cpu资源(如果这是您的问题)。您的服务器端必须编程为提供一个服务API,调用该API时将取消作业并立即返回以触发GWT回调

您可以刷新页面,这将放弃页面请求并关闭套接字,但服务器端仍将运行。当服务器端完成其任务并尝试执行http响应时,它将失败,并在服务器日志中指出它已丢失客户端套接字

这是一个非常直截了当的推理

因此,它属于servlet/服务的设计,即如何通过后续请求识别先前的请求

级联回调

如果请求2依赖于请求1的状态,则应执行级联回调。如果请求2要在成功时运行,则应将请求2放入回调的onFailure块中。而不是一个接一个地提交两个请求

否则,计时器将触发请求2,请求2将承担两项责任:

  • 告诉服务器取消上一个请求
  • 获取一小部分信息

让我给你一个类比

你,老板,打电话给一个供应商,想得到一些产品信息。供应商说他们需要给你回电话,因为收集信息需要一些时间。所以,你给了他们你的工头的联系方式

你的工头等待电话。然后你告诉工头,如果需要超过30分钟,就取消信息请求

你的工头认为你疯了,因为他不能取消请求,因为他没有一个帐户,使他有权访问供应商的订购系统

因此,你的工头在30分钟后根本不理会供应商的任何回应。你聪明的工头在手机中设置了计时器,30分钟后不理会供应商的电话。即使你杀死了工头,切断了所有通信链接,供应商仍将忙着为你的请求提供服务

GWT客户端上没有什么可以取消的。回调只是一个等待调用的javascript对象

要取消调用,您需要告诉服务器端停止浪费cpu资源(如果这是您的问题)。您的服务器端必须编程为提供一个服务API,调用该API时将取消作业并立即返回以触发GWT回调

您可以刷新页面,这将放弃页面请求并关闭套接字,但服务器端仍将运行。当服务器端完成其任务并尝试执行http响应时,它将失败,并在服务器日志中指出它已丢失客户端套接字

这是一个非常直截了当的推理

因此,它属于servlet/服务的设计,即如何通过后续请求识别先前的请求

级联回调

如果请求2依赖于请求1的状态,则应执行级联回调。如果请求2要在成功时运行,则应将请求2放入回调的onFailure块中。而不是一个接一个地提交两个请求

否则,计时器将触发请求2,请求2将承担两项责任:

  • 告诉服务器取消上一个请求
  • 获取一小部分信息

实际上,在客户端有一些东西是可以取消的——http请求本身。如果服务器不知何故卡住(下一次调用无法取消上一次调用),连接可以保持打开状态,并且,根据浏览器的不同,您可能无法建立连接。或者正在下载图像,因此无法发出第二个RPC请求。事实证明,可以终止http连接,但这不会通知服务器停止,只需释放传输。要执行此操作,请返回
com.google.gwt。http.client.Request
来自y